0

「準リアルタイム検索」のようないくつかの機能を使用して、検索システムの速度を向上させ、索引のオープンを高速化したいと考えています。

次のコードのいずれかを使用することの違いと利点を教えてください。

IndexReader newIndexReader = IndexReader.openIfChanged(oldReader);

IndexWriter writer; // create an IndexWriter here
...
IndexReader reader = writer.getReader();

最初のケースでは、indexWriter が IndexReader と同じプロセスにある必要はないことに注意してください。

4

1 に答える 1

2

まず、writer.getReader()3.6 リリースでのみ使用できますが、すべての v4 (4.0、4.1、...) リリースにはありません。したがって、保守性を重視する場合は使用しないでください。

さて、あなたの質問に答えます。writer.getReader()保留中のすべての書き込みをフラッシュし、無条件に新しいリーダーを開きます (さらに、他にもいくつかの制限があります - メソッド javadoc を参照してください)。IndexReader.openIfChanged(oldReader)変更があった場合にのみ新しいリーダーを開き、それ以外の場合は古いリーダーを返します。

私の好みでは、ライターからリーダーを開くことも概念的に間違っています (以前は Lucene でこの問題が発生するケースが他にもありました。たとえば、リーダーを使用してドキュメントを削除することが可能でした)。

どちらかを選択する場合、どちらの方法を使用するかは間違いないと思います。

于 2013-10-17T14:41:34.133 に答える