Как исправить превышение лимита maxWarmingSearchers? - PullRequest
21 голосов
/ 22 сентября 2011

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

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

Превышен лимит maxWarmingSearchers =2, попробуйте позже

Ответы [ 3 ]

17 голосов
/ 20 мая 2014

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

Если вы часто сталкиваетесь с этой ошибкой, вы можете (теоретически) увеличить число в ваших maxWarmingSearchers, но это рискованно делать, если вы уверены, что у вас есть системные ресурсы (RAM, CPU и т. д.), чтобы сделать это безопасно. Более правильный способ справиться с ситуацией - это уменьшить как часто вы отправляете коммиты.

Что означает эта ошибка, так это то, что вы в основном делаете коммиты слишком часто, и внутренний кеш не может справиться с частотой, которую вы говорите: «очистите кеш и позвольте мне искать новые данные». Вам нужно уменьшить частоту коммитов. Вы можете найти больше информации об этой проблеме здесь в Настройка поиска в реальном времени , но основная идея заключается в том, что чем больше граней вы используете, тем больший интервал вам понадобится между коммитами.

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

16 голосов
/ 22 сентября 2011

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

0 голосов
/ 12 октября 2015

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...