1

プログラムの実行速度が遅すぎたため、Lucene indexwriter.closeが呼び出される前に、40,000のドキュメントがデータベースに挿入された直後に、コードの一部を最適化するためにプログラムを途中で終了する必要がありました。その後、その特定の実行からの40,000ドキュメントに制限されているように見えるいくつかのレコードの結果を見つけることができませんでした。

それは、プログラムの実行中にインデックスを作成したレコードが失われたことを意味しますか?データをインデックスに書き込めるようにするには、IndexWriterを常に完全に閉じる必要がありますか?

前もって感謝します!

4

1 に答える 1

1

呼び出す必要があるのは近くではありませんが、commitします。addDocumentはドキュメントのみを分析し、データをメモリにバッファリングしますが、コミットは保留中の変更をフラッシュし、fsync を実行します。

close呼び出しは内部的にコミットします。これが、 close が必要であると想定する理由だと思います。

ただし、この操作は addDocument に比べて非常にコストがかかるため、頻繁に commit を呼び出さないように注意してください。

于 2013-01-10T15:47:02.443 に答える