我正在使用新发布的 Lucene 4,并且我了解与文档术语向量相关的 API 发生了很大变化。我已经阅读了迁移文档和相关的各种博客邮件列表帖子,并且我相信我正确使用了 API。但是,我总是从 IndexReader.getTermVector() 得到一个空术语引用。这就是我正在做的事情:
// Indexing, given "bodyString" as a String containing document text
Document doc = new Document();
doc.add(new TextField("body", bodyString, Field.Store.YES));
MyIndexWriter.addDocument(doc);
// much later, enumerating document term vectors for "body" field for every doc
for (int i = 0; i < Reader.maxDoc(); ++i) {
final Terms terms = Reader.getTermVector(i, "body");
if (terms != null) {
int numTerms = 0;
// record term occurrences for corpus terms above threshold
term = terms.iterator(term);
while (term.next() != null) {
++numTerms;
}
System.out.println("Document " + i + " had " + numTerms + " terms");
}
else {
System.err.println("Document " + i + " had a null terms vector for body");
}
}
当然,它打印出我对每个文档都有空词向量,即 Reader.getTermVector(i, "body") 总是返回空值。
当我查看 Luke 中的索引时,我有存储了正文字段的文档。但是,当我在突出显示正文字段的同时单击“TV”按钮(在“文档”选项卡中)时,Luke 告诉我“术语向量不可用”。索引时是否需要添加其他类型的选项来记录此信息?
有任何想法吗?谢谢!
乔恩
更新
我应该注意到有IndexReader
问题的是一个实例SlowCompositeReaderWrapper
,它包装了一个DirectoryReader
. 我使用 a 是SlowCompositeReaderWrapper
因为我也想要语料库术语频率,并且不清楚如何在所有IndexReader
叶子上迭代所有文档(文档 ID 是否在它们之间重复使用?等等)。
SlowCompositeReaderWrapper 是罪魁祸首吗?