任何人都知道为什么以及如何解决这个问题,因为我在同一时间进行了非常繁忙的更新和搜索。
打开新搜索器时出错。
maxWarmingSearchers = 2的超出限制,稍后再试
答案 0 :(得分:17)
根据Solr FAQ: What does "exceeded limit of maxWarmingSearchers=X" mean?
如果你经常遇到这个错误,你可以(在理论上)增加 您的maxWarmingSearchers中的号码,但除非您这样做,否则这样做很危险 有信心你有系统资源(RAM,CPU等) 它安全。处理这种情况的更正确的方法是减少 你发送提交的频率。
这个错误的含义是你基本上经常提交提交,内部缓存无法跟上你说“清除缓存并让我用新数据搜索”的频率。您需要降低提交的频率。您可以在Near Realtime Search Tuning中找到有关此问题的更多信息,但基本思路是您使用的方面越多,提交之间所需的间隔就越大。
我解决这个问题的一种方法是停止进行手动提交(即让我的应用程序将数据提交给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 soft commits。
答案 1 :(得分:16)
正如你已经很好地解释here,你应该减少你提交的次数,或者在solrconfig.xml中更改maxWarmingSearchers的值(这不是一个好习惯)
答案 2 :(得分:0)
根据https://wiki.apache.org/solr/CommitWithin
Solr中有多种提交策略。最知名的是客户端的显式
commits
。然后你在solrconfig.xml中配置了AutoCommit,它允许Solr在一定时间或数量的文档之后自动提交adds
,最后在输入缓冲区满时可能会有幕后提交。 / p>
您可以使用&#39; CommitWithin&#39;处理这个问题。
Solr3.5及更高版本,它可以是server.add(mySolrInputDocument, 10000);
在早期版本中,您可以使用以下代码
UpdateRequest req = new UpdateRequest();
req.add(mySolrInputDocument);
req.setCommitWithin(10000);
req.process(server);
它可以减少您经常发送的提交。