Как настроить Solr для повышения скорости индексации

У меня есть клиентская программа, которая генерирует от 1 до 50 миллионов документов Solr и добавляет их в Solr.
Я использую ConcurrentUpdateSolrServer для отправки документов от клиента, 1000 документов на запрос.
Документы относительно небольшие ( несколько небольших текстовых полей).
Я хочу повысить скорость индексирования.
Я пытался увеличить "ramBufferSizeMB" до 1 ГБ и "mergeFactor" до 25, но не заметил никаких изменений.
Мне было интересно, есть ли другие рекомендуемые настройки для повышения скорости индексации Solr.
Буду признателен за любые ссылки на соответствующие материалы.


person Avner Levy    schedule 27.03.2013    source источник


Ответы (2)


Похоже, вы выполняете массовый импорт данных в Solr, поэтому вам не нужно сразу искать какие-либо данные.

Во-первых, вы можете увеличить количество документов на запрос. Поскольку ваши документы небольшие, я бы даже увеличил их до 100 000 документов на запрос или больше и попробовал.

Во-вторых, вы хотите уменьшить количество коммитов при массовом индексировании. В вашем solrconfig.xml найдите:

<!-- AutoCommit

     Perform a hard commit automatically under certain conditions.
     Instead of enabling autoCommit, consider using "commitWithin"
     when adding documents.

     http://wiki.apache.org/solr/UpdateXmlMessages

     maxDocs - Maximum number of documents to add since the last
               commit before automatically triggering a new commit.

     maxTime - Maximum amount of time in ms that is allowed to pass
               since a document was added before automatically
               triggering a new commit.

     openSearcher - if false, the commit causes recent index changes
     to be flushed to stable storage, but does not cause a new
     searcher to be opened to make those changes visible.
  -->
 <autoCommit>
   <maxTime>15000</maxTime>
   <openSearcher>false</openSearcher>
 </autoCommit>

Вы можете полностью отключить автофиксацию, а затем вызвать фиксацию после публикации всех ваших документов. В противном случае вы можете настроить числа следующим образом:

По умолчанию maxTime составляет 15 секунд, поэтому автоматическая фиксация происходит каждые 15 секунд, если есть незафиксированные документы, поэтому вы можете установить это значение на что-то большее, скажем, 3 часа (т.е. 3 * 60 * 60 * 1000). Вы также можете добавить <maxDocs>50000000</maxDocs>, что означает, что автоматическая фиксация происходит только после добавления 50 миллионов документов. После того, как вы опубликуете все свои документы, вызовите коммит один раз вручную или из SolrJ — коммит займет некоторое время, но в целом это будет намного быстрее.

Кроме того, после того, как вы закончите массовый импорт, уменьшите maxTime и maxDocs, чтобы любые добавочные сообщения, которые вы будете делать в Solr, были зафиксированы намного раньше. Или используйте commitWithin, как указано в solrconfig.

person arun    schedule 28.03.2013
comment
У вас может не хватить памяти, если коммиты полностью отключены. Но не открывать поисковик - хорошая идея. - person Alexandre Rafalovitch; 29.03.2013
comment
привет подскажи пожалуйста как его настроить чтоб не открывался заново поисковик? - person Krunal; 12.12.2013
comment
<openSearcher>false</openSearcher> не будет открывать новый поисковик после автоматической фиксации. - person arun; 13.12.2013
comment
Но если вы используете репликацию с <str name="replicateAfter">commit</str>, то стоит упомянуть, что слейвы не заботятся о том, открыт новый поисковик на мастере или нет. Если на ведущем есть автоматически зафиксированный индекс, версия индекса будет отличаться на ведущем и ведомых, поэтому ведомые будут реплицировать (частичный) индекс с ведущего и открывать новый поисковик. Это может особенно вызвать проблемы, если вы используете обработчик импорта данных с clean=true на мастере для выполнения полного импорта, поскольку он сначала выдает запрос на удаление всех. - person arun; 27.06.2014

В дополнение к тому, что было написано выше, при использовании SolrCloud вы можете рассмотреть возможность использования CloudSolrClient при использовании SolrJ. Клиентский класс CloudSolrClient поддерживает Zookeeper и может напрямую подключаться к осколку лидера, что в некоторых случаях ускоряет индексирование.

person Rafal    schedule 25.03.2020