Подтвердить что ты не робот

Как исправить превышенный предел maxWarmingSearchers?

Кто-нибудь знает, почему и как это решить, поскольку у меня очень загруженные обновления и поиск в то же время.

Ошибка при открытии нового поисковика.

Превышен предел maxWarmingSearchers = 2, повторите попытку позже

4b9b3361

Ответ 1

Как хорошо объяснено здесь, вы должны уменьшить количество совершенных вами коммитов или изменить значение maxWarmingSearchers в файле solrconfig.xml(что не является хорошей практикой)

Ответ 2

В соответствии с Часто задаваемые вопросы по Solr: что означает "превышение предела maxWarmingSearchers = X" означает?

Если вы столкнулись с этой ошибкой, вы можете (теоретически) увеличить число в ваших maxWarmingSearchers, но это рискованно делать, если вы уверены, что у вас есть системные ресурсы (ОЗУ, ЦП и т.д.) это безопасно. Более правильным способом справиться с ситуацией является сокращение как часто вы отправляете коммит.

Эта ошибка означает, что вы в основном делаете коммиты слишком часто, а внутренний кеш не может справиться с частотой, которую вы говорите: "Очистите кеш и позвольте мне искать новые данные". Вам нужно уменьшить частоту, которую вы совершаете. Более подробную информацию об этой проблеме вы можете найти здесь Рядом с поисковой настройкой в ​​режиме реального времени, но основная идея заключается в том, что чем больше граней вы используете, тем больше вам потребуется интервал между фиксациями.

Один из способов, с которым я столкнулся, заключался в том, что я прекратил делать ручные коммиты (т.е. чтобы мое приложение отправляло данные в 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 commit.

Ответ 3

В соответствии с 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);
Это может уменьшить часто отправляемые вами коммиты.