Lucene文档词条打印问题:部分已索引字段未显示求解
问题原因及解决方案
你遇到的核心问题是:IndexReader.getTermVectors()只能读取那些在索引时明确开启了词向量(TermVectors)存储的字段,而你添加的path、hostname、type等字段,大概率没有配置词向量存储属性。
Lucene字段的默认行为是仅开启索引,但不存储词向量。要让字段能被getTermVectors()获取,必须在创建字段时显式开启词向量存储:
- 对于TextField(分词字段),可以这样配置:
Field typeField = new TextField("type", fileType, Store.YES); typeField.setStoreTermVectors(true); // 开启词向量存储 - 对于StringField(不分词的精确匹配字段),同样需要开启:
Field pathField = new StringField("path", filePath, Store.YES); pathField.setStoreTermVectors(true);
另外需要注意两点:
- 已生成的旧索引不会自动补全词向量,你需要重新索引所有相关文档,新的字段配置才会生效
- 不同Lucene版本的API可能略有差异,比如部分版本需要用
TermVectorInfo来配置更细节的词向量选项(如是否存储位置、偏移量)
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

