我正在将我的Java应用程序从Lucene 2迁移到Lucene 4,但是我找不到任何好的方法来转换代码。我还试图访问http://lucene.apache.org/core/4_0_0-ALPHA/MIGRATE.html,但其中的示例代码根本不起作用(例如,reader.termDocsEnum
方法不适用于IndexReader
或DirectoryReader
,但仅适用于我从未听说过的AtomicReader
)。
给定一个名为indexReader
的IndexReader
,旧代码是:
Term find = new Term("field", "value");
TermDocs td = indexReader.termDocs(find);
while (termDocs.next()) {
Document d = termDocs.doc();
// do stuff
}
如何转换这些代码?谢谢!
发布于 2013-01-16 17:28:39
以下内容应与您的案例相关:
文档/职位枚举不能查找术语。相反,TermsEnum能够查找,然后您从该TermsEnum请求文档/位置枚举。
我猜你需要这个:
TermsEnum termsEnum = atomicReader.terms("fieldName").iterator();
BytesRef text = new BytesRef("searchTerm");
if (termsEnum.seekExact(text, true)) {
...
}
低级API现在显然是面向原子(非复合)阅读器的,因为这是获得最佳性能的唯一途径。您可能会将从Directory
获取的复合阅读器包装在一个SlowCompositeReaderWrapper
中,但是,正如类名已经警告的那样,它将是slow。
https://stackoverflow.com/questions/14354331
复制相似问题