2012-03-16 4 views
1

私の場合、luceneインデックスに挿入されたすべての文書には固有のIDがあります。新しい文書をlucene索引に追加するときに、文書が索引に存在していた場合は、文書を索引に挿入しないでください。この戦略を実装する方法は?
luceneがドキュメントを見つけられない場合は、最初にdocIdでドキュメントを検索してから挿入する必要があると思います。しかし、索引付けするindexWriterを共有する3つのスレッドがあるため、間違ったケースがあるはずです。たとえば、スレッド1とスレッド2は同じdocIdを持つ2つのドキュメントを処理していますが、thread1がdocIdを検索して何も見つからない場合、ドキュメントをインデックスに挿入しますが、thread1がインデックスを読み込んだ後、その結果、索引には2つの文書が存在します。どうすればこれを避けることができますか?lucene:重複なしで文書を追加する方法

答えて

5

IndexWriter.updateDocumentは、用語に基づいて文書をアトミックに削除して追加します。

+0

シナリオを処理する方法 - ドキュメントが見つかった場合は更新しない場合は更新しないでください。 [私の質問を参照してください](http://stackoverflow.com/questions/39653209/how-to-avoid-duplicate-document-indexing-in-lucene-6-0)。私は何かが欠落しているのかどうかは分かりませんが、私のシナリオでは、最も自然な状況は、文書がキーで見つからないときに更新するようです。ドキュメントキーとしてすべてのフィールドを組み合わせました。 –

+0

私が実装をお願いするのは、これら3つの点です。1.入ってくる文書が存在し、既存のものよりも変更されていない場合 - 何もしない2.文書が存在し、既存の文書よりも変更されている - 更新文書3.文書が存在しない場合 - add資料。 –

関連する問題