API Rollover
Создаёт новый индекс для потока данных или алиаса индекса.
POST my-data-stream/_rollover
Запрос
POST /<rollover-target>/_rollover/
POST /<rollover-target>/_rollover/<target-index>
Предварительные требования
- Если включены функции безопасности Elasticsearch, у вас должна быть роль
manageиндекса для целевого индекса.
Описание
Рекомендуется использовать действие ILM rollover для автоматизации переключений. См. Жизненный цикл индекса.
API Rollover создаёт новый индекс для потока данных или алиаса индекса. Поведение API зависит от целевого индекса.
Переключение потока данных
Если вы переключаете поток данных, API создаёт новый индекс записи для потока. Предыдущий индекс записи потока становится обычным индексом-образом. Переключение также увеличивает номер поколения потока данных. См. Переключение.
Переключение алиаса индекса с индексом записи
До Elasticsearch 7.9 вы обычно использовали алиас индекса с индексом записи для управления данными временных рядов. Потоки данных заменяют эту функциональность, требуют меньше обслуживания и автоматически интегрируются с уровнями данных.
Если алиас индекса ссылается на несколько индексов, один из индексов должен быть индексом записи. API Rollover создаёт новый индекс записи для алиаса с is_write_index, установленным на true. API также устанавливает is_write_index на false для предыдущего индекса записи.
Переключение алиаса индекса с одним индексом
Если алиас индекса указывает только на один индекс, API создаёт новый индекс для алиаса и удаляет исходный индекс из алиаса.
Увеличение имён индексов для алиаса
При переключении алиаса индекса можно указать имя для нового индекса. Если вы не укажете имя, и текущий индекс заканчивается на - и число, например, my-index-000001 или my-index-3, имя нового индекса увеличивает это число. Например, если вы переключаете алиас с текущим индексом my-index-000001, переключение создаёт новый индекс с именем my-index-000002. Это число всегда имеет 6 символов и заполняется нулями, независимо от имени предыдущего индекса.
Ожидание активных фрагментов
Переключение создаёт новый индекс и подчиняется настройке wait_for_active_shards.
Параметры пути
-
<rollover-target> - (Обязательно, строка) Имя потока данных или алиаса индекса для переключения.
-
<target-index> -
(Необязательно, строка) Имя создаваемого индекса. Поддерживает математические функции даты. Потоки данных не поддерживают этот параметр.
Если имя текущего индекса записи алиаса не заканчивается на
-и число, например,my-index-000001илиmy-index-3, этот параметр обязателен.Имена индексов должны соответствовать следующим критериям:
- Только строчные буквы
- Не могут содержать
\,/,*,?,",<,>,|, ` ` (пробел),,,# - Индексы до версии 7.0 могли содержать двоеточие (
:), но это устарело и не будет поддерживаться в 7.0+ - Не могут начинаться с
-,_,+ - Не могут быть
.или.. - Не могут быть длиннее 255 байтов (обратите внимание, это байты, поэтому многобайтовые символы быстрее достигнут ограничения 255)
- Имена, начинающиеся с
., устарели, за исключением скрытых индексов и внутренних индексов, управляемых плагинами
Параметры запроса
-
dry_run - (Необязательно, Булево) Если
true, проверяет, соответствует ли текущий индекс одному или нескольким указаннымconditions, но не выполняет переключение. По умолчаниюfalse. -
include_type_name - [7.0.0] Устарело в 7.0.0. Типы отображения устарели. См. Устранение типов отображения. (Необязательно, булево) Если
true, тип отображения ожидается в теле отображений. По умолчаниюfalse. -
wait_for_active_shards -
(Необязательно, строка) Количество активных копий фрагментов, которые должны быть активны перед продолжением операции. Установите значение
allили любое положительное целое число до общего количества фрагментов в индексе (number_of_replicas+1). По умолчанию: 1, первичный фрагмент.См. Активные фрагменты.
-
master_timeout - (Необязательно, единицы времени) Время ожидания подключения к мастер-узлу. Если ответ не получен до истечения срока ожидания, запрос завершается ошибкой. По умолчанию
30s. -
timeout - (Необязательно, единицы времени) Время ожидания ответа. Если ответ не получен до истечения срока ожидания, запрос завершается ошибкой. По умолчанию
30s.
Тело запроса
-
aliases -
(Необязательно, объект объектов) Псевдонимы для целевого индекса. Потоки данных не поддерживают этот параметр.
Свойства объектов
aliases-
<alias> -
(Обязательно, объект) Ключ — имя псевдонима. Имена псевдонимов индексов поддерживают математику дат.
Тело объекта содержит опции для псевдонима. Поддерживается пустой объект.
Свойства
<alias>-
filter - (Необязательно, объект Query DSL) Запрос, используемый для ограничения документов, к которым может получить доступ псевдоним.
-
index_routing - (Необязательно, строка) Значение, используемое для маршрутизации операций индексирования на конкретный фрагмент. Если указано, это переопределяет значение
routingдля операций индексирования. -
is_hidden - (Необязательно, булево) Если
true, псевдоним скрытый. По умолчаниюfalse. Все индексы для псевдонима должны иметь одинаковое значениеis_hidden. -
is_write_index - (Необязательно, булево) Если
true, индекс — индекс записи для псевдонима. По умолчаниюfalse. -
routing - (Необязательно, строка) Значение, используемое для маршрутизации операций индексирования и поиска на конкретный фрагмент.
-
search_routing - (Необязательно, строка) Значение, используемое для маршрутизации операций поиска на конкретный фрагмент. Если указано, это переопределяет значение
routingдля операций поиска.
-
-
-
conditions -
(Необязательно, объект) Условия для переролирования. Если указаны, Elasticsearch выполняет переролирование только в том случае, если текущий индекс соответствует одному или нескольким из этих условий. Если этот параметр не указан, Elasticsearch выполняет переролирование безусловно.
Для запуска переролирования текущий индекс должен соответствовать этим условиям в момент запроса. Elasticsearch не отслеживает индекс после ответа API. Для автоматизации переролирования используйте ILM’s
rolloverвместо этого.Свойства объектов
conditions-
max_age - (Необязательно, единицы времени) Вызывает переролирование после достижения максимального прошедшего времени с момента создания индекса. Прошедшее время всегда рассчитывается с момента создания индекса, даже если дата происхождения индекса настроена на пользовательскую дату, например, при использовании настроек index.lifecycle.parse_origination_date или index.lifecycle.origination_date.
-
max_docs - (Необязательно, целое число) Вызывает переролирование после достижения указанного максимального числа документов. Добавленные документы с момента последнего обновления не включаются в подсчет документов. Подсчет документов не включает документы в реплицированных фрагментах.
-
max_size -
(Необязательно, единицы измерения размера в байтах) Вызывает переролирование, когда индекс достигает определенного размера. Это общий размер всех первичных фрагментов в индексе. Реплики не учитываются при определении максимального размера индекса.
Чтобы увидеть текущий размер индекса, используйте API _cat indices. Значение
pri.store.sizeпоказывает совокупный размер всех первичных фрагментов. -
max_primary_shard_size -
(Необязательно, единицы измерения размера в байтах) Вызывает переролирование, когда наибольший первичный фрагмент в индексе достигает определенного размера. Это максимальный размер первичных фрагментов в индексе. Как и в случае с
max_size, реплики игнорируются.Чтобы увидеть текущий размер фрагмента, используйте API _cat shards. Значение
storeпоказывает размер каждого фрагмента, аprirepуказывает, является ли фрагмент первичным (p) или репликой (r).
-
-
mappings -
(Необязательно, объект маппинга) Маппинг для полей в индексе. При указании данный маппинг может включать:
- Имена полей
- Типы данных полей
- Параметры маппинга
См. Mapping.
Потоки данных не поддерживают этот параметр.
-
settings -
(Необязательно, объект настроек индекса) Параметры конфигурации индекса. См. Настройки индекса.
Потоки данных не поддерживают этот параметр.
Тело ответа
-
acknowledged - (Булево) Если
true, запрос получил ответ от мастер-узла в течениеtimeoutпериода. -
shards_acknowledged - (Булево) Если
true, запрос получил ответ от активных фрагментов в течениеmaster_timeoutпериода. -
old_index - (строка) Предыдущий индекс для потока данных или псевдонима индекса. Для потоков данных и псевдонимов индексов с индексом записи это предыдущий индекс записи.
-
new_index - (строка) Индекс, созданный при переролировании. Для потоков данных и псевдонимов индексов с индексом записи это текущий индекс записи.
-
rolled_over - (Булево) Если
true, поток данных или псевдоним индекса был переролирован. -
dry_run - (Булево) Если
true, Elasticsearch не выполнил переролирование. -
condition -
(объект) Результат каждого условия, указанного в запросе
conditions. Если условия не были указаны, это пустой объект.Свойства
condition-
<condition> - (Булево) Ключ — каждое условие. Значение — его результат. Если
true, индекс удовлетворял условию при переролировании.
-
Примеры
Перенос потока данных
Следующий запрос выполняет перенос потока данных безусловно.
POST my-data-stream/_rollover
Следующий запрос выполняет перенос потока данных только в том случае, если текущий индекс записи удовлетворяет одному или нескольким из следующих условий:
- Индекс был создан 7 или более дней назад.
- Индекс содержит 1000 или более документов.
- Наибольший первичный фрагмент индекса составляет 50 ГБ или более.
POST my-data-stream/_rollover
{
"conditions": {
"max_age": "7d",
"max_docs": 1000,
"max_primary_shard_size": "50gb"
}
} API возвращает:
{
"acknowledged": true,
"shards_acknowledged": true,
"old_index": ".ds-my-data-stream-2099.05.06-000001",
"new_index": ".ds-my-data-stream-2099.05.07-000002",
"rolled_over": true,
"dry_run": false,
"conditions": {
"[max_age: 7d]": false,
"[max_docs: 1000]": true,
"[max_primary_shard_size: 50gb]": false
}
} Перенос алиаса индекса с индексом записи
Следующий запрос создает <my-index-{now/d}-000001> и устанавливает его в качестве индекса записи для my-alias.
# PUT <my-index-{now/d}-000001>
PUT %3Cmy-index-%7Bnow%2Fd%7D-000001%3E
{
"aliases": {
"my-alias": {
"is_write_index": true
}
}
} Следующий запрос выполняет перенос алиаса только в том случае, если текущий индекс записи удовлетворяет одному или нескольким из следующих условий:
- Индекс был создан 7 или более дней назад.
- Индекс содержит 1000 или более документов.
- Наибольший первичный фрагмент индекса составляет 50 ГБ или более.
POST my-alias/_rollover
{
"conditions": {
"max_age": "7d",
"max_docs": 1000,
"max_primary_shard_size": "50gb"
}
} API возвращает:
{
"acknowledged": true,
"shards_acknowledged": true,
"old_index": "my-index-2099.05.06-000001",
"new_index": "my-index-2099.05.07-000002",
"rolled_over": true,
"dry_run": false,
"conditions": {
"[max_age: 7d]": false,
"[max_docs: 1000]": true,
"[max_primary_shard_size: 50gb]": false
}
} Если имена индексов алиаса используют математику дат и вы переносите индексы с регулярным интервалом, вы можете использовать математику дат для сужения поиска. Например, следующий поиск нацелен на индексы, созданные в последние три дня.
# GET /<my-index-{now/d}-*>,<my-index-{now/d-1d}-*>,<my-index-{now/d-2d}-*>/_search
GET /%3Cmy-index-%7Bnow%2Fd%7D-*%3E%2C%3Cmy-index-%7Bnow%2Fd-1d%7D-*%3E%2C%3Cmy-index-%7Bnow%2Fd-2d%7D-*%3E/_search Перенос алиаса индекса с одним индексом
Следующий запрос создает <my-index-{now/d}-000001> и его алиас my-write-alias.
# PUT <my-index-{now/d}-000001>
PUT %3Cmy-index-%7Bnow%2Fd%7D-000001%3E
{
"aliases": {
"my-write-alias": { }
}
} Следующий запрос выполняет перенос алиаса только в том случае, если текущий индекс удовлетворяет одному или нескольким из следующих условий:
- Индекс был создан 7 или более дней назад.
- Индекс содержит 1000 или более документов.
- Наибольший первичный фрагмент индекса составляет 50 ГБ или более.
POST my-write-alias/_rollover
{
"conditions": {
"max_age": "7d",
"max_docs": 1000,
"max_primary_shard_size": "50gb"
}
} API возвращает:
{
"acknowledged": true,
"shards_acknowledged": true,
"old_index": "my-index-2099.05.06-000001",
"new_index": "my-index-2099.05.07-000002",
"rolled_over": true,
"dry_run": false,
"conditions": {
"[max_age: 7d]": false,
"[max_docs: 1000]": true,
"[max_primary_shard_size: 50gb]": false
}
} Указание настроек во время переноса
Обычно вы используете шаблон индекса, чтобы автоматически настроить индексы, созданные во время переноса. Если вы переносите алиас индекса, вы используете API переноса для добавления дополнительных настроек индекса или перезаписи настроек в шаблоне. Потоки данных не поддерживают параметр settings.
POST my-alias/_rollover
{
"settings": {
"index.number_of_shards": 2
}
}
© 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-rollover-index.html