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

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

13 голосов
/ 24 августа 2011

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

Ответы [ 3 ]

12 голосов
/ 31 августа 2011

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

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

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

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

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

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

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

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

2 голосов
/ 22 ноября 2012

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

0 голосов
/ 22 января 2013

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

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

Это улучшает индексирование на 40–45%, сокращая время .Но при поиске скорость поиска немного увеличивается. Для поиска это заняло на 25% больше времени , чем при обычном поиске.

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