Luceneは検索結果をキャッシュしているようです-なぜですか?
質問
私のプロジェクトでは、全文検索にLucene 2.4.1を使用します。これはJ2EEプロジェクトであり、IndexSearcherは一度作成されます。バックグラウンドでは、インデックスは数分ごとに更新されます(コンテンツが変更されたとき)。ユーザーは、ページ上の検索メカニズムを使用してインデックスを検索できます。
問題は、Luceneから返された結果が何らかの形でキャッシュされているように見えることです。
これは私が気づいたシナリオです:
- アプリケーションを起動して「キーワード」を検索します-6つの結果が返されます
- Luke を使用して、インデックスが更新されました。 '、
- アプリケーションを使用して再度検索すると、6つの結果が返されます。
設定を分析しましたが、どこにもキャッシュが見つかりませんでした。検索をデバッグしましたが、出力コードにキャッシュはありません。 searcher.search
は6つの結果を返します。
Luceneのキャッシュは、何らかの形で内部的にキャッシュされますか?どのプロパティなどを確認する必要がありますか
解決
開いているIndexReaderがあるインデックスに対してIndexWritersによって行われた変更を確認するには、必ず IndexReader.reopen()で最新の変更を確認します。
IndexWriter は、明示的なcommit()、close()、またはautoCommitをtrueに設定することにより、変更をコミットしています。
他のヒント
2.9.0より前のバージョンでは、Luceneはクエリの結果を自動的にキャッシュしました。それ以降のリリースでは、クエリをQueryFilterでラップしてから結果をCachingWrapperFilterでラップしない限り、キャッシュはありません。インデックスを再度開くことが問題になる場合は、リリース> = 2.9.0に切り替えることを検討できます
もう1つの注意:IndexReaderがドキュメントを更新したリアルタイムの他のスレッドを見つけるために、IndexReaderを初期化する際に、パラメーター「読み取り専用」偽である必要があります。そうしないと、reopen()メソッドは機能しません。