У меня есть клиентская программа, которая генерирует от 1 до 50 миллионов документов Solr и добавляет их в Solr.
Я использую ConcurrentUpdateSolrServer для отправки документов от клиента, 1000 документов на запрос.
Документы относительно небольшие ( несколько небольших текстовых полей).
Я хочу повысить скорость индексирования.
Я пытался увеличить "ramBufferSizeMB" до 1 ГБ и "mergeFactor" до 25, но не заметил никаких изменений.
Мне было интересно, есть ли другие рекомендуемые настройки для повышения скорости индексации Solr.
Буду признателен за любые ссылки на соответствующие материалы.
Как настроить Solr для повышения скорости индексации
Ответы (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.
<openSearcher>false</openSearcher>
не будет открывать новый поисковик после автоматической фиксации.
- person arun; 13.12.2013
<str name="replicateAfter">commit</str>
, то стоит упомянуть, что слейвы не заботятся о том, открыт новый поисковик на мастере или нет. Если на ведущем есть автоматически зафиксированный индекс, версия индекса будет отличаться на ведущем и ведомых, поэтому ведомые будут реплицировать (частичный) индекс с ведущего и открывать новый поисковик. Это может особенно вызвать проблемы, если вы используете обработчик импорта данных с clean=true
на мастере для выполнения полного импорта, поскольку он сначала выдает запрос на удаление всех.
- person arun; 27.06.2014
В дополнение к тому, что было написано выше, при использовании SolrCloud вы можете рассмотреть возможность использования CloudSolrClient
при использовании SolrJ. Клиентский класс CloudSolrClient
поддерживает Zookeeper и может напрямую подключаться к осколку лидера, что в некоторых случаях ускоряет индексирование.