У меня есть клиентская программа, которая генерирует 1-50 миллионов Solr-документов и добавляет их в Solr.
Я использую ConcurrentUpdateSolrServer для подталкивания документов от клиента, 1000 документов на запрос.
Документы относительно небольшие (несколько небольших текстовых полей).
Я хочу улучшить скорость индексирования.
Я попытался увеличить "ramBufferSizeMB" до 1G и "mergeFactor" до 25, но не видел никаких изменений.
Мне было интересно, есть ли другие рекомендуемые настройки для улучшения скорости индексации Solr.
Будут оценены любые ссылки на соответствующие материалы.
Как настроить Solr для улучшения скорости индексирования
Ответ 1
Похоже, вы делаете массовый импорт данных в Solr, поэтому вам не нужно сразу искать какие-либо данные.
Во-первых, вы можете увеличить количество документов на запрос. Поскольку ваши документы небольшие, я бы даже увеличил его до 100 тыс. Документов по запросу или более и попробовал.
Во-вторых, вы хотите уменьшить количество попыток совершения при индексировании навалом. В твоем 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>
Вы можете полностью отключить autoCommit, а затем вызвать фиксацию после публикации всех ваших документов. В противном случае вы можете настроить номера следующим образом:
Значение по умолчанию maxTime
равно 15 секундам, поэтому автоматическое совершение происходит каждые 15 секунд, если есть незафиксированные документы, поэтому вы можете установить это на что-то большое, скажем, 3 часа (т.е. 3 * 60 * 60 * 1000). Вы также можете добавить <maxDocs>50000000</maxDocs>
, что означает, что автоматическое совершение происходит только после добавления 50 миллионов документов. После того, как вы разместите все свои документы, вызовите фиксацию один раз вручную или из SolrJ - для фиксации потребуется некоторое время, но это будет намного быстрее.
Также после того, как вы закончите свой массовый импорт, уменьшите maxTime
и maxDocs
, чтобы любые пошаговые сообщения, которые вы будете делать с Solr, получат гораздо раньше. Или используйте commitWithin
, как указано в solrconfig.