API принудительного слияния
Принудительно выполняет слияние фрагментов одного или нескольких индексов. Для потоков данных API принудительно выполняет слияние фрагментов базовых индексов потока.
POST /my-index-000001/_forcemerge
Запрос
POST /<target>/_forcemerge
POST /_forcemerge
Предварительные условия
- Если включены функции безопасности Elasticsearch, у вас должна быть роль
maintenanceилиmanageправо доступа к индексам для целевого потока данных, индекса или псевдонима.
Описание
Используйте API принудительного слияния, чтобы принудительно выполнить слияние фрагментов одного или нескольких индексов. Слияние уменьшает количество сегментов в каждом фрагменте, объединяя некоторые из них, а также освобождает место, занимаемое удаленными документами. Слияние обычно происходит автоматически, но иногда полезно инициировать его вручную.
API принудительного слияния следует использовать только после завершения записи в индекс. Принудительное слияние может привести к созданию очень больших сегментов (>5 ГБ), и если вы продолжите запись в такой индекс, политика автоматического слияния никогда не будет рассматривать эти сегменты для будущих слияний, пока они не будут в основном состоять из удаленных документов. Это может привести к сохранению очень больших сегментов в индексе, что может привести к увеличению использования дискового пространства и ухудшению производительности поиска.
Блокировка при выполнении принудительного слияния
Вызовы этого API блокируются до завершения слияния. Если соединение с клиентом потеряно до завершения, процесс принудительного слияния будет продолжен в фоновом режиме. Любые новые запросы на принудительное слияние тех же индексов также будут заблокированы до завершения текущего принудительного слияния.
Принудительное слияние нескольких индексов
Вы можете принудительно слить несколько индексов с помощью одного запроса, указав:
- Один или несколько потоков данных, содержащих несколько базовых индексов
- Несколько индексов
- Один или несколько псевдонимов
- Все потоки данных и индексы в кластере
Каждый фрагмент, на который направлено слияние, принудительно сливается отдельно с помощью force_merge пула потоков. По умолчанию у каждого узла есть только один force_merge поток, что означает, что фрагменты на этом узле сливаются по одному. Если вы расширите force_merge пул потоков на узле, то он будет выполнять принудительное слияние фрагментов параллельно.
Принудительное слияние временно увеличивает объем хранения фрагмента, который сливается, так как может потребоваться свободное пространство до трех раз больше размера в случае, если max_num_segments параметр установлен на 1, чтобы перезаписать все сегменты в новый.
Параметры пути
-
<target> - (Необязательно, строка) Список потоков данных, индексов и псевдонимов, используемых для ограничения запроса. Поддерживаются подстановочные знаки (
*). Чтобы нацелить все потоки данных и индексы, опустите этот параметр или используйте*или_all.
Параметры запроса
-
allow_no_indices -
(Необязательно, булево) Если
false, запрос возвращает ошибку, если какое-либо подстановочное выражение, псевдоним индекса или_allзначение нацелены только на отсутствующие или закрытые индексы. Это поведение применяется даже если запрос направлен на другие открытые индексы. Например, запрос, направленный наfoo*,bar*, возвращает ошибку, если индекс начинается сfoo, но нет индекса, начинающегося сbar.По умолчанию значение равно
true. -
expand_wildcards -
(Необязательно, строка) Тип индекса, на который могут ссылаться шаблоны подстановочных знаков. Если запрос может нацеливаться на потоки данных, этот аргумент определяет, соответствуют ли шаблоны подстановочных знаков скрытым потокам данных. Поддерживаются значения, разделенные запятыми, такие как
open,hidden. Допустимые значения:-
all - Соответствие любому потоку данных или индексу, включая скрытые.
-
open - Соответствие открытым, нескрытым индексам. Также соответствует любому нескрытому потоку данных.
-
closed - Соответствие закрытым, нескрытым индексам. Также соответствует любому нескрытому потоку данных. Потоки данных не могут быть закрыты.
-
hidden - Соответствие скрытым потокам данных и скрытым индексам. Должно быть использовано в сочетании с
open,closedили обоими. -
none - Шаблоны подстановочных знаков не принимаются.
По умолчанию значение равно
open. -
-
flush - (Необязательно, булево) Если
true, Elasticsearch выполняет очистку индексов после принудительного слияния. По умолчанию значение равноtrue. -
ignore_unavailable - (Необязательно, булево) Если
false, запрос возвращает ошибку, если он нацелен на отсутствующий или закрытый индекс. По умолчанию значение равноfalse. -
max_num_segments -
(Необязательно, целое число) Количество сегментов для слияния. Для полного слияния индексов установите значение в
1.По умолчанию проверяется необходимость выполнения слияния. Если нужно, выполняется.
-
only_expunge_deletes -
(Необязательно, булево) Если
true, удаляются все сегменты, содержащие болееindex.merge.policy.expunge_deletes_allowed(по умолчанию 10) процентов удаленных документов. По умолчанию значение равноfalse.В Lucene документ не удаляется из сегмента; он просто помечается как удаленный. Во время слияния создается новый сегмент, который не содержит эти метки удаления документов.
Примеры
Принудительное слияние определенного потока данных или индекса
POST /my-index-000001/_forcemerge
Принудительное слияние нескольких потоков данных или индексов
POST /my-index-000001,my-index-000002/_forcemerge
Принудительное слияние всех индексов
POST /_forcemerge
Потоки данных и индексы на основе времени
Принудительное слияние полезно для управления более старыми базовыми индексами потока данных и другими индексами на основе времени, особенно после переключения. В этих случаях каждый индекс получает трафик индексирования только в течение определенного периода времени. После того, как индекс больше не получает записей, его фрагменты можно принудительно слить в один сегмент.
POST /.ds-my-data-stream-2099.03.07-000001/_forcemerge?max_num_segments=1
Это может быть хорошей идеей, поскольку фрагменты с одним сегментом иногда могут использовать более простые и эффективные структуры данных для выполнения поисков.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/indices-forcemerge.html