Узнайте, как улучшить скорость индексирования Elasticsearch для повышения производительности, следуя этим 11 полезным советам.
- Настройте интервал обновления
Настройте refresh_interval (по умолчанию 1 сек) в соответствии с требованиями вашей системы. - Отключение реплик
Вы можете следовать этому официальному руководству для отключения реплик и настроить их в соответствии с вашими требованиями. - Автоматическое поле ID
Не устанавливайте поле "_id" для документа. Если в этом нет необходимости, лучше позволить Elasticsearch установить "_id" автоматически. - Использовать несколько рабочих/потоков
Используйте несколько рабочих / потоков для индексации. - Использовать официальные клиенты
Используйте "официальные" клиенты Elasticsearch, поскольку они были разработаны для оптимизации пула соединений и сохранения alives. - Избегайте частых обновлений
Избегайте частых обновлений (одного и того же документа), поскольку каждое обновление создает новый документ в Elasticsearch и помечает старый документ как удаленный. Это может привести к появлению нескольких удаленных документов и увеличению размеров сегментов, которые не всегда объединяются в процессе слияния сегментов. Чтобы обойти эту проблему, вы можете собрать все эти обновления в приложении, используемом для вызова API индекса (например, в поисковой службе, написанной на Java или Python), чтобы
1) удалить ненужные обновления (например, многочисленные обновления полей счетчика)
2) отправить только несколько обновлений в Elasticsearch. - Тщательно разрабатывайте индексную связку
Будьте внимательны при разработке индексного отображения. Не индексируйте поля, если они не используются для поиска (по умолчанию true), так как это уменьшит размер инвертированного индекса Elasticsearch и сэкономит затраты на анализ поля. Опция index управляет этим. - Осторожно используйте анализаторы
Осторожно используйте анализаторы на ваших полях; некоторые анализаторы (ngram и т.д.) занимают значительные ресурсы и могут замедлить скорость индексирования и значительно увеличить размер индекса больших текстовых полей. - Используйте параметр Wait_For
Если некоторые ваши требования требуют немедленного поиска в проиндексированном документе, то вместо явного обновления используйте параметр wait_for при индексировании. - Используйте bulk API
Используйте bulk API для индексации множества документов вместо того, чтобы индексировать множество документов по отдельности. Производительность Bulk API зависит от размера, а не от количества документов в запросе. - Использовать SSD
Используйте SSD вместо магнитных дисков для ускорения процесса слияния сегментов.