2012-01-03 17 views
4

Luceneインデックスを利用するアプリケーションを作成しています。は、インデックス付きドキュメントを頻繁に更新または削除する必要があります。Lucene用に必要な空きディスク容量IndexWriter.ExpungeDeletes()

が、私は誰かがLuceneのインデックスから削除のマークを付けた文書の永久削除を望んでいるならば、彼は二つの選択肢があることを理解する:

  1. Indexwriter.Optimize()OR

  2. Indexwriter.ExpungeDeletesを()

すべての削除セッションのインデックスを最適化するには、高価で時間がかかるため、が必要です2倍の空きディスク容量なので、ディスク容量が不足している状況では、Optimize()は適切ではないようです。

明らかに、ExpungeDeletes()は、時間の節約とすべてのセグメントのマージを強制しないため、2倍の空き領域は必要ないと主張しています。

ただし、この操作では、特定のセグメントを正常にマージするために、空きディスク領域が必要です。

だから、私の質問は:ExpungeDeletesため

を必要とするどのくらいの空きディスク()が正常にそのタスクを完了するために?

私はすでに最適化されている単一のセグメントにマージされたいくつかのインデックスを使ってテストしたので、この質問をしています...そして、expungedeletes()はこのケースでは空きディスクスペースまた、私は上記の場合にスローされることから、この例外を防ぐことができますどのような方法がありMergePolicy-MergeExceptionが

:それは例外をスロー他、インデックスと少なくとも同じ大きさ?

ありがとうございます。

答えて

1

JIRAの問題3577に興味があるかもしれません。要約すると:expungeDeletesは、単に削除を削除してインデックスの残りの部分だけを残しているわけではないので、貧しい名前です。

正確なパフォーマンスを知りたい場合:expungeDeltesは、削除されたすべてのセグメントに対してマージを呼び出します。あなたのケースでは、それはすべてのセグメントになる可能性がありますか...ほぼoptimizeを呼び出すのと同じです。

検索結果が最適化されていないと思われる場合はどうなりますか?

関連する問題