Как повысить производительность индексирования в Elasticsearch

Узнайте, как повысить скорость индексирования для улучшения производительности Elasticsearch, следуя этим 11 полезным советам

Elasticsearch

Настройка интервала обновления

Настройте интервал обновления refresh_interval (по умолчанию 1 сек) в соответствии с требованиями вашей системы.

Отключение реплик

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

Автоматическое поле ID

Не устанавливайте поле "_id" для документа. Если в этом нет необходимости, лучше разрешить Elasticsearch устанавливать "_id" автоматически.

Использовать несколько потоков

Использовать несколько потоков для индексации.

Использовать официальные клиенты

Используйте "официальные" клиенты Elasticsearch, поскольку они оптимизированы для пула соединений и поддерживают alives.

Избегайте частых обновлений

Избегайте частых обновлений (одного и того же документа), поскольку каждое обновление создает новый документ в Elasticsearch и помечает старый документ как удаленный. Это может привести к появлению нескольких удаленных документов и увеличению размеров сегментов, которые не всегда объединяются в процессе слияния сегментов. Чтобы обойти эту проблему, можно собрать все обновления в приложении, используемом для вызова API индекса (например, в поисковой службе, написанной на Java или Python), чтобы 1) удалить ненужные обновления (например, многократное обновление полей счетчика) и 2) отправить в Elasticsearch только несколько обновлений.

Тщательно разрабатывайте индексное отображение

Будьте внимательны при проектировании индексного отображения. Не индексируйте поля, если они не используются для поиска (по умолчанию true), так как это уменьшит размер инвертированного индекса Elasticsearch и сэкономит затраты на анализ поля. Опция index управляет этим.

Осторожно используйте анализаторы

Осторожно используйте анализаторы для полей; некоторые анализаторы (ngram и др.) занимают значительные ресурсы и могут замедлить скорость индексирования и значительно увеличить размер индекса для больших текстовых полей.

Использовать параметр Wait_For

Если в некоторых случаях требуется немедленный поиск по проиндексированному документу, то вместо явного обновления используйте параметр wait_for при индексировании.

Использование массового API

Используйте массовый API для индексации множества документов вместо того, чтобы индексировать их по отдельности. Производительность Bulk API зависит от размера, а не от количества документов в запросе.

Использовать SSD

Используйте SSD вместо магнитных дисков для ускорения процесса объединения сегментов.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий