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

elasticsearch logo Elasticsearch

Если вы хотите, чтобы ваша система Elasticsearch работала с максимальной производительностью, необходимо периодически выполнять обслуживание индексов. К счастью, Elasticsearch предоставляет несколько полезных инструментов для решения этих задач. API Force Merge можно использовать для оптимизации индекса Elasticsearch, а API Refresh и Flush - для очистки индексов. В этой статье мы расскажем, как очищать и оптимизировать индексы Elasticsearch.

Хотя массовые запросы являются гораздо более эффективным способом индексирования документов, чем добавление их по одному, важно учитывать как количество индексируемых документов, так и их размер. Например, может показаться, что индексирование всего нескольких сотен документов не вызовет никаких проблем, но что, если средний размер этих документов составляет 1 ГБ или более? Чем больше запрос к Elasticsearch, тем меньше памяти остается для обработки других запросов. К счастью, найти "правильный" размер массового запроса, не приводящий к падению производительности, несложно - попробуйте индексировать пакеты документов, постепенно увеличивая их размер, пока не достигнете момента, когда производительность начнет снижаться.

Использование cURL для проверки работоспособности и состояния индексов кластера Elasticsearch

С помощью API _cat можно вернуть список всех индексов, а также узнать статус и состояние каждого из них:

Вы также можете использовать API _aliases для получения полного имени и псевдонима всех индексов на кластере Elasticsearch, как показано на скриншоте ниже:

Использование cURL для проверки работоспособности и состояния индексов кластера Elasticsearch

Скриншот терминала, выполняющего cURL-запрос к кластеру Elasticsearch для получения имен, псевдонимов, статуса и состояния его индексов

Использование API Force Merge для оптимизации индекса Elasticsearch

API _optimize был переименован в _forcemerge

Одним из простых способов очистки и оптимизации индексов Elasticsearch является использование Force Merge API. Чтобы понять, как работают операции Force Merge, необходимо немного знать об архитектуре Elasticsearch, построенной на базе Lucene. Документы вставляются в индекс, который сопоставляется с одним или несколькими шардами. Каждый шард состоит из сегментов, которые можно рассматривать как мини-индексы, выполняющие поиск в определенной части коллекции данных. Force Merge позволяет поддерживать оптимальную производительность индексов Elasticsearch за счет слияния сегментов, что уменьшает количество сегментов в шарде и минимизирует избыточные данные.

Для выполнения принудительного слияния можно выполнить запрос POST cURL:

Вы также можете выполнить принудительное слияние нескольких индексов в одном запросе: bash curl -XPOST 'localhost:9200/people1,people2/_forcemerge?pretty'

Параметры API Force Merge

Существует несколько параметров, которые можно использовать в запросе на принудительное слияние:

  • max_num_segments: Этот параметр определяет максимальное количество сегментов после завершения слияния. По умолчанию используется значение "1", поэтому изменяйте его только в том случае, если вы не хотите, чтобы индексы были полностью объединены.
  • only_expunge_deletes: Когда документ удаляется в Lucene, он только помечается как удаленный - на самом деле он не удаляется из сегмента. Установка этого параметра в значение "true" позволяет объединять только сегменты, содержащие удаления. По умолчанию используется значение "false".
  • flush: Этот параметр представляет собой булеву опцию со значением по умолчанию true, которая будет очищать индекс после слияния.

Использование API Refresh для поддержания индексов Elasticsearch в актуальном состоянии

Для поддержания индексов в актуальном состоянии полезно также использовать API _refresh. Это заставляет явно обновлять индекс, обеспечивая доступность документов для поиска сразу после индексирования. Как и в случае с API Force Merge, обновление может быть выполнено через cURL:

Вызовы обновления выполняются Elasticsearch автоматически на регулярной основе, но использование API Refresh - это хороший способ убедиться в том, что вы получаете самую последнюю версию индекса перед его очисткой или внесением в него изменений.

Очистка индексов с помощью Flush API

Еще одним полезным API для поддержания индексов в хорошем состоянии является Flush API. С помощью API _flush можно освободить память индекса, очистив его от данных:

Вот пример cURL, в котором два индекса сбрасываются с использованием опции force: bash curl -XPOST 'localhost:9200/people1,people2/_flush?force'

Тонкая настройка параметра Refresh Interval

Для определения частоты обновления индекса можно изменить параметр refresh_interval. Числовое значение представляет собой количество секунд до следующего обновления; по умолчанию эта настройка равна 1, что означает, что обновление выполняется каждую секунду:

Заключение

Выполнение базового обслуживания индексов Elasticsearch требует некоторого дополнительного времени, но повышение производительности делает эти усилия оправданными. Использование Force Merge API, Refresh API и Flush API позволяет поддерживать индексы Elasticsearch в идеальном рабочем состоянии. Благодаря пошаговым инструкциям, приведенным в этой статье, вы без труда сможете очистить и оптимизировать индексы Elasticsearch с помощью этих удобных API.

Avatar for Gnostis
Gnostis
Добавить комментарий