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

Ускорение индексации Solr

Я как бы работаю над тем, чтобы ускорить скорость индексации Solr. Я просто хочу знать по умолчанию, сколько потоков (если они есть) использует Solr для индексирования. Есть ли способ увеличить/уменьшить это число.

4b9b3361

Ответ 1

При индексировании документа выполняется несколько шагов:

  • документ анализируется,
  • данные помещаются в буфер RAM,
  • когда буфер RAM заполнен, данные будут сброшены на новый сегмент на диске,
  • Если сегментов больше ${mergeFactor}, сегменты объединяются.

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

Вы можете настроить количество потоков, которые будут использоваться для четвертого шага, если вы используете ConcurrentMergeScheduler (http://lucene.apache.org/java/3_0_1/api/core/org/apache/lucene/index/ConcurrentMergeScheduler. HTML). Однако нет никакого смысла настраивать максимальное количество потоков для использования в конфигурационных файлах Solr, поэтому вам нужно написать собственный класс, вызывающий setMaxThreadCount в конструкторе.

Мой опыт заключается в том, что основными способами улучшения скорости индексирования с помощью Solr являются:

  • покупка более быстрого оборудования (особенно ввода/вывода),
  • отправка данных в Solr из нескольких потоков (как много потоков, как ядра, это хороший старт),
  • с использованием формата Javabin,
  • с использованием более быстрых анализаторов.

Хотя StreamingUpdateSolrServer выглядит интересным для улучшения производительности индексирования, он не поддерживает формат Javabin, Поскольку анализ Javabin намного быстрее, чем разбор XML, я получил лучшую производительность, отправив массовые обновления (800 в моем случае, но с довольно небольшими документами), используя CommonsHttpSolrServer и формат Javabin.

Вы можете прочитать http://wiki.apache.org/lucene-java/ImproveIndexingSpeed дополнительную информацию.

Ответ 2

В этой статье описывается подход к масштабированию индексирования с помощью SolrCloud, Hadoop и Behemoth. Это для Solr 4.0, который не был выпущен в то время, когда этот вопрос был первоначально опубликован.

Ответ 3

Вы можете хранить содержимое во внешнем хранилище, например файл;

Все поля, содержащие огромный размер содержимого, в схеме сохранены = "false" для этого поля и сохраняют содержимое для этого поля во внешнем файле, используя некоторую эффективную иерархию файловой системы.

Он улучшает индексацию на 40-45% меньше времени. Но при выполнении поиска скорость поиска - это то, что увеличилось. Для поиска это заняло 25% больше времени, чем обычный поиск.