2011-07-13 13 views
4

私のアプリケーションのDBデータを再インデックスし、同じ時間に検索が実行されると、検索を実行するスレッドは再インデックスが作成されるまでスリープ状態になります完了しました。インデックス作成中にデータの変更を防ぐために、インデックス作成メソッドはスレッドセーフであると仮定します。 Luceneには、検索のみ(データが変更されていない場所)でのみ応答するように構築された方法はありますか?それとも私自身のことを考え始めるべきですか? Tomcatサーバーでアプリケーションを実行しています。Luceneによるインデックス作成中に検索が応答しない

おかげで、Tomer

+0

インデックスへの書き込みと読み取りには問題はありません。読者にはコミットされたデータのみが表示されます(リアルタイムに近い検索を使用している場合を除く)。あなたが描いていることはうまくいくはずですこの問題を経験したサンプルコードを教えてください。 – sisve

答えて

1

私は(個々のドキュメントを再インデックスとは対照的に、あるいは最初からすべてを再インデックス)あなたが実際にインデックスを再構築していることを前提としています。インデックスが再構築されている間は、整合性の取れた状態ではないため、クエリを実行することはできません。

よく使用される最も簡単な解決策は、インデックスをバックグラウンドで再構築して(古いものに対してクエリを実行しながら)、新しいインデックスで置き換えることです。

サーバが頻繁にクラッシュする問題が発生した場合は、Zoieなどの実装されているようなシステマティックなアプローチを検討する価値があります。その後のインデックス作成要求を記録するため、索引の最後の正しいスナップショットから取得します。

+0

Luceneには "Copy on write"メカニズムが組み込まれていますか? – tomericco

+0

私はLucene自体のそのような仕組みを知らない。索引の管理は、アプリケーションまたは検索サーバー(Solr/ES)に渡されます。例えば、[Solrのマルチコアサポート](http://wiki.apache.org/solr/CoreAdmin)がそのために使用できると思います。 –

関連する問題