私は非常に忙しい更新と検索を同時に行っているので、誰でもこれを解決する理由と方法を知っています。
新しいサーチャーを開くときにエラーが発生しました。
MaxWarmingSearchers = 2の制限を超えました。しばらくしてからもう一度お試しください
よく説明されているように、 ここ コミットの数を減らすか、solrconfig.xmlのmaxWarmingSearchersの値を変更する必要があります(これは良い方法ではありません)。
Solr FAQ: "exceeded limit of maxWarmingSearchers = X"とはどういう意味ですか?
このエラーが頻繁に発生する場合は、(理論的には)maxWarmingSearchersの数を増やすことができますが、安全に実行するためのシステムリソース(RAM、CPUなど)があると確信していない限り、これを行うのは危険です。 。この状況に対処するより正確な方法は、コミットを送信する頻度を減らすことです。
このエラーが意味することは、基本的にコミットを頻繁に行っており、内部キャッシュが「キャッシュをクリアして新しいデータで検索させて」という頻度に追いつけないことです。コミットする頻度を減らす必要があります。この問題の詳細については、ここ ほぼリアルタイム検索のチューニング を参照してください。ただし、基本的な考え方は、使用するファセットが多いほど、コミットの間隔が長くなるということです。
これを回避する1つの方法は、手動コミット(つまり、アプリケーションでデータをsolrに送信してからコミットリクエストを実行する)を停止し、 solr autocommit をオンにすることでした。
次に例を示します。
<!-- solrconfig.xml -->
<autoCommit>
<maxDocs>10000</maxDocs> <!-- maximum uncommited docs before autocommit triggered -->
<maxTime>15000</maxTime> <!-- maximum time (in MS) after adding a doc before an autocommit is triggered -->
<openSearcher>false</openSearcher> <!-- SOLR 4.0. Optionally don't open a searcher on hard commit. This is useful to minimize the size of transaction logs that keep track of uncommitted updates. -->
</autoCommit>
必要な間隔の大きさ(つまりmaxTime
)を把握する必要がありますが、実際には、アプリケーションにファセット検索を追加するたびに(または、インデックスや何を追加するか)、間隔を増やす必要があります。 。
これらのコミットの頻度より多くのリアルタイム検索が必要な場合は、 Solrソフトコミット を調べることができます。
https://wiki.Apache.org/solr/CommitWithin のとおり
Solrには複数のコミット戦略があります。最もよく知られているのは、クライアントからの明示的な
commits
です。次に、AutoCommitをsolrconfig.xmlで構成します。これにより、一定の時間または数のドキュメントの後でSolrが自動的にadds
をコミットできます。最後に、入力バッファーがいっぱいになると、背後でコミットが行われる場合があります。
'CommitWithin'を使用してこの問題を処理できます。
Solr3.5以降では、server.add(mySolrInputDocument, 10000);
にすることができます
以前のバージョンでは、以下のコードを使用できますUpdateRequest req = new UpdateRequest(); req.add(mySolrInputDocument); req.setCommitWithin(10000); req.process(server);
コミットを送信する頻度を減らすことができます。