0

Mike McCandless によるこの素晴らしいブログを読んで、Lucene のトランザクション機能のパワーと、古いコミットを保存して以前のコミットでインデックスライターを開くことができる機能について説明しました。しかし、すぐにこのシナリオが頭に浮かびました。以前のコミットで実行された新しいコミットのために内部的にある種のブランチを作成しますか?それとも、その前のコミットの後にすべての新しいコミットを置き換えて、その前のコミットで実行したばかりの最近のコミットを保持するだけですか?!

4

2 に答える 2

0

強制的にコミットしたい場合は、commit() を呼び出すか、ライターを閉じます。コミットが完了すると、新しく開かれた IndexReader インスタンスは、その commit 時点でのインデックスへの変更を認識します。このモードで実行している場合、最適化またはセグメント マージの実行中にリーダーを更新しないように注意してください。これにより、かなりのディスク領域が占有される可能性があります。

autoCommit に関係なく、IndexReader または IndexSearcher は、それが開かれた「時点」のインデックスのみを参照します。リーダーが開かれた後にインデックスにコミットされた変更は、リーダーが再度開かれるまで表示されません。

void commit()
      Commits all pending changes (added & deleted documents, optimizations, segment merges, added indexes, etc.) to the index, and syncs all referenced index files, such that a reader will see the changes and the index updates will survive an OS or machine crash or power loss.

void commit(Map commitUserData)
      Commits all changes to the index, specifying a commitUserData Map (String -> String).
于 2012-06-12T04:15:51.480 に答える
0

実際、ブランチが作成されます。新しいコミットには、開いた古いコミットと、インデックス作成セッション中に行った変更が反映されます。(開いたコミットの後に) 将来のコミットがどうなるかは、削除ポリシー次第です。それらのコミットが保存されている場合は、いつでもそれらの 1 つに対してライターを自由に開いて、それらからブランチを作成することもできます。

于 2012-06-12T15:31:43.993 に答える