0

JavaアプリケーションをLucene2からLucene4に移行していますが、コードを変換するための適切な方法が見つかりません。また、 http://lucene.apache.org/core/4_0_0-ALPHA/MIGRATE.htmlにアクセスしようとしましたが、その中のサンプルコードは単純に機能しません(たとえば、メソッドはまたはにreader.termDocsEnum存在しませんが、私だけに存在します)聞いたことがない)。IndexReaderDirectoryReaderAtomicReader

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は、これが最高のパフォーマンスを実現する唯一の方法であるため、アトミック(非コンポジット)リーダーを明確に対象としています。取得した複合リーダーをでラップすることもできますが、クラス名がすでに警告しているため、遅くなります。DirectorySlowCompositeReaderWrapper

于 2013-01-16T09:28:38.750 に答える