2012-02-21 2 views
4

Luceneのドキュメントでは、アプリケーション全体でIndexWriterとIndexSearcherの1つのインスタンスを使用することが最も高速であると述べています。私はすべての回でIndexWriterオープンの静的インスタンスを持っている、と常に開いておくが、IndexWriterは、インデックス上の任意のCRUD操作を実行する場合ときに再構築されIndexSearcherの静的インスタンス瞬間Lucene IndexWriter&IndexSearcherをアプリの生涯にわたって開いたままにすることをお勧めします

。アプリケーションが終了するとIndexWriterIndexSearcherの両方を閉じるインデックス管理クラスにDisposeメソッドを実装しました(しかし、これはWebアプリケーションなので、呼び出されることなく実行される可能性があります)。

これは、物事をやり遂げるための合理的な方法のように聞こえますか?また、静的インスタンスを使用すると、マルチスレッドの問題が発生します。私。使用中に私の作家と​​サーチャーをロックする必要がありますか?

答えて

6

Luceneインデックスのライター、リーダー、およびサーチャーはスレッドセーフです(2nd note of the doc of IndexWriterまたは1st of the doc of IndexSearcherなどを参照)。したがって、同じインスタンスを複数のスレッドに再利用することは問題ありません。

あなたは、インデックスの作家やサーチャーの管理方法の説明によると、私はあなたが役に立つかもしれないのLuceneの2つのユーティリティクラスを再実装していると思う:ほぼリアルタイムのサーチャーを管理することが非常に簡単NRTManagerSearcherManager

+0

情報をお寄せいただきありがとうございます。スレッドセーフであることは素晴らしいことです。あなたが言及したクラスを調べます。 – jcvandan

+2

javaとc#の実装に違いはありますか、それとも同じですか? – xforfun

関連する問題