0

lucene index onec を毎日更新しています。一般的な私の戦略は次のとおりです。

  1. 最後のインデックス生成以降に変更された DB 内のすべてのオブジェクトを検索します。
  2. これらのオブジェクトの新しい tmp-index を作成します。(古いインデックスはまだ利用可能です)
  3. IndexWriter.deleteDocuments(Term) を使用して、古いインデックスからすべての新しいインデックス付きドキュメント (tmp-index にあります) を削除します。
  4. IndexWriter.addIndexes(...) を使用して、古いインデックスと tmp-index をマージします。

私は lucene wiki でそれを見つけました: Lucene には直接の更新手順はありません... lucene 4.1.0 doc でそれも見つけました:ドキュメントは updateDocument で更新できます...

IndexWriter.updateDocument(Term, Document) を試しましたが、フィルターを使用して検索を実行すると、メソッドの 1 つから NPE が取得されました。誰かが同様の問題を抱えていましたか?インデックスをどのように更新しますか?

4

2 に答える 2

1

私がしていることは基本的にこれです:

永続的な IndexReader/Readers を保持します。これにより、作成されてからの状態が保持されます。

すべてのドキュメントをもう一度削除して作成し始めます。deleteAll() を実行してから、それらを再作成する (addDocument()) だけだと思います。

コミットすると、これらすべての変更が有効になります。

持っているすべての IndexReader を削除するので、システムが次に Reader を要求したときに、それを作成し、後続の要求のために保存します。

updateDocument は基本的に削除/作成です。

于 2013-01-30T15:17:40.657 に答える
0

IndexWriter でインデックスを更新するときに、 を使用しSearcherManagerて新しい IndexSearchers を取得することをお勧めします。一時インデックスを使用する必要はありませんか?

于 2013-01-31T08:05:37.983 に答える