0

我正在将我的 Java 应用程序从 Lucene 2 迁移到 Lucene 4,但我找不到任何转换代码的好方法。我也尝试访问http://lucene.apache.org/core/4_0_0-ALPHA/MIGRATE.html但其中的示例代码根本不起作用(例如该方法reader.termDocsEnum不存在IndexReaderor DirectoryReader,但仅适用于AtomicReader我没听说过)。

给定一个IndexReader被调用indexReader的,旧代码是:

Term find = new Term("field", "value");
TermDocs td = indexReader.termDocs(find);
while (termDocs.next()) {
    Document d = termDocs.doc();
    // do stuff
}

如何转换该代码?谢谢!

4

1 回答 1

1

以下内容应与您的情况相关:

docs/positions 枚举不能寻找一个术语。相反,TermsEnum 能够搜索,然后您从该 TermsEnum 请求 docs/positions 枚举。

我猜你需要这个:

TermsEnum termsEnum = atomicReader.terms("fieldName").iterator();
BytesRef text = new BytesRef("searchTerm");
if (termsEnum.seekExact(text, true)) {
  ...
}

低级 API 现在明显面向原子(非复合)读取器,因为这是获得最佳性能的唯一途径。您可以将您从中获得的复合阅读器包装Directory在 a 中SlowCompositeReaderWrapper,但是,正如类名已经警告的那样,它会很

于 2013-01-16T09:28:38.750 回答