2

私が取り組んでいるプロジェクトの場合、約1,000万のドキュメントのインデックスがあります。100kから5mの範囲のドキュメントのセットの場合、定期的にフィールドを追加する必要があります。

Lucene 4は、ドキュメントの更新をサポートしています(基本的に削除と追加)。より多くのドキュメントセットにフィールドを追加するための良いアプローチは何でしょうか?

これまでに試したのは、を使用して、SearcherManagerをラップしIndexWriter、フィールドがまだ含まれていないが、Query興味のあるドキュメントと一致するドキュメントを、これらをラップすることで小さな検索を行うことですBooleanQuery。次に、を繰り返しScoreDocs、ドキュメントを取得し、新しいフィールドを追加して、各ドキュメントに保存されているIをwriter.updateDocument使用して呼び出します。uuid次に、を呼び出しcommitmaybeRefreshBlocking、を再取得してIndexSearcher、もう一度検索します。これはちょっと遅く、素朴なアプローチのようです。

4

1 に答える 1

2

追加したフィールドに基づいて検索が異なる結果を返す前に、 IndexSearcherを要求するだけで済みます。

追加したフィールドによって検索が影響を受けない場合は、ドキュメントがインデックスに追加されたときにIndexSearcherを再取得するだけで済みます。

したがって、各検索の前ではなく、必要な場合にのみIndexSearcherを必要とする場合は、処理が単純化され、少なくとも少しスピードアップします。

于 2013-01-15T21:44:52.547 に答える