1

Lucene 4 を使用してデータを保持しています。私が今直面している問題は次のとおりです。

インデックスからドキュメントを削除し、削除されたドキュメントの docId を取得する方法は?

ドキュメントを削除するために使用する方法は次のとおりです。

Query query = new BooleanQuery();
...
indexWriter.deleteDocuments(query);

しかし、このメソッドが呼び出されると、削除されたドキュメント (およびそのフィールド) を取得する方法 (メソッドまたはコールバック) が見つかりませんでした。

誰かがそれを行う方法について考えを持っていますか?

4

1 に答える 1

3

1回の電話でこれを行うことはできないと思います。

Lucene の削除はすぐには行われないため (追加commit()が必要です)、削除されたドキュメント ID を返すのは少しあいまいです。delete メソッドの内部を見ると、実際には削除キューの 1 つにジョブを追加するだけです。とcommit()はいえ、これに関連するものも返されません;-(

とにかく、私が考えることができる唯一の方法は、あなたの を実行しquery、ドキュメント/ドキュメント ID を収集してから実行することdeleteDocuments(query)です。commit()オーバーラップが発生する可能性があります (別のスレッドが同じドキュメントを削除する場合など) が、フェーズのため、これは避けられません。

于 2013-01-29T15:16:32.667 に答える