0

他の誰かが同じ Lucene ( Solr ではない) 状況にあったかどうか疑問に思っていましたか?

Lucene インデックスを開くときは、通常のクエリでウォームアップし、サーチャーを一定期間キャッシュして、多くのクエリで使用できるようにします。その後、もう一度開いて繰り返します。私は Linux で Lucene 3.6 を実行しているため、開いているインデックス データのほとんどが JVM ヒープではなくファイル システム キャッシュにあることを理解しています。私が見つけたのは、クエリの応答時間が時間の経過とともに増加することです-通常のクエリを再実行してサーチャーを再加熱し続けない限り. 他の誰かがこの問題を抱えていますか? もしそうなら、クエリの応答性を維持する唯一の方法は再ウォームアップですか? どのくらいの頻度で最適に機能しますか?

いくつかの背景

  • マシンは、他の非 Lucene ファイル処理を行うために常に非常にビジーであり、F/S キャッシュ ページが時間の経過とともに置き換えられているのではないかと思われます。
  • インデクサーはクエリ サーバーと同じ JVM で実行されないため、NRT などは関係ありません。

ありがとう!

クリス

4

2 に答える 2

0

この問題は lucene 自体とは関係がないと思います。OS の問題だと思います。lucene は OS のネイティブ I/O メソッドを使用する Java I/O ライブラリを使用していることを知っているからです。

新しいクエリでサーチャーをウォームアップするたびに、OS はそのクエリによって取得されたファイル全体をキャッシュしているため、同じクエリでサーチャーを再ウォームアップすると、高速に取得され、ただし、別のクエリでサーチャーをウォームする場合、OS はファイルが異なるため、ファイルを再度キャッシュする必要があります。これは実際には OS リソースのオーバーヘッドです。

しかし、なぜあなたのリーダーを一定期間保持したいのか、本当に疑問に思っています。私が言おうとしているのは、検索クエリがユーザーからのものである場合、同じクエリを繰り返す割合は非常に低く、新しいIndexSearcherオブジェクトも作成するということですそのコストではありません。

そのため、for each クエリを作成することをお勧めしIndexSearcherます (ジョブが終了したら、リソースを削除します)。あなたのビジネスケースがそれでうまくいくかどうか。

于 2014-01-26T18:13:10.313 に答える
0

どのディレクトリを使用していますか?

http://wiki.apache.org/lucene-java/ImproveSearchingSpeedswappinessの説明に従って試してみることができます。

http://jprante.github.io/applications/2012/07/26/Mmap-with-Lucene.htmlmlockallで説明され ているように、別のオプションを使用することもできます。

于 2014-01-27T09:46:41.763 に答える