API Rollover
Создаёт новый индекс для потока данных или псевдонима индекса.
resp = client.indices.rollover(
alias="my-data-stream",
)
print(resp) response = client.indices.rollover( alias: 'my-data-stream' ) puts response
const response = await client.indices.rollover({
alias: "my-data-stream",
});
console.log(response); 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. -
lazy - (Необязательный, логический) Если
true, сигнализирует, что поток данных будет переролирован при следующем выполнении операции индексирования. Применимо только к потокам данных. По умолчаниюfalse. -
wait_for_active_shards -
(Необязательный, строка) Количество копий каждого фрагмента, которые должны быть активны перед продолжением операции. Установите в
allили любое неотрицательное целое число до общего количества копий каждого фрагмента в индексе (number_of_replicas+1). По умолчанию1, что означает ожидание только активации каждого первичного фрагмента.См. Активные фрагменты.
-
master_timeout - (Необязательный, единицы времени) Период ожидания главного узла. Если главный узел недоступен до истечения срока ожидания, запрос завершается ошибкой. По умолчанию
30s. Также можно установить в-1, чтобы указать, что запрос никогда не должен истечь. -
timeout - (Необязательный, единицы времени) Период ожидания ответа от всех соответствующих узлов в кластере после обновления метаданных кластера. Если ответ не получен до истечения срока ожидания, обновление метаданных кластера всё ещё применяется, но ответ укажет, что он не был полностью подтверждён. По умолчанию
30s. Также можно установить в-1, чтобы указать, что запрос никогда не должен истечь.
Тело запроса
-
aliases -
(Необязательно, объект из объектов) Псевдонимы для целевого индекса. Потоки данных не поддерживают этот параметр.
Свойства объектов
aliases-
<alias> -
(Обязательно, объект) Ключ — это имя псевдонима. Имена псевдонимов индексов поддерживают date math.
Тело объекта содержит параметры для псевдонима. Поддерживается пустой объект.
Свойства
<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 выполняет смену безусловно.
Если условия указаны, по крайней мере одно из них должно быть условием max_*. Индекс будет переключён, если выполнено любое условие max_* и все условия min_*.
Для запуска смены текущий индекс должен удовлетворять этим условиям в момент запроса. 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). -
max_primary_shard_docs -
(Необязательно, целое число) Запускает смену, когда самый большой первичный фрагмент в индексе достигает определённого количества документов. Это максимальное количество документов в первичных фрагментах в индексе. Как и в случае с
max_docs, реплики игнорируются.Чтобы узнать текущее количество документов в фрагменте, используйте API _cat shards. Значение
docsотображает количество документов в каждом фрагменте. -
min_age - (Необязательно, единицы измерения времени) Не производит смену, пока не будет достигнуто минимальное время с момента создания индекса. См. примечания по
max_age. -
min_docs - (Необязательно, целое число) Не производит смену, пока не будет достигнуто указанное минимальное количество документов. См. примечания по
max_docs. -
min_size - (Необязательно, единицы измерения размера в байтах) Не производит смену, пока индекс не достигнет определённого размера. См. примечания по
max_size. -
min_primary_shard_size - (Необязательно, единицы измерения размера в байтах) Не производит смену, пока самый большой первичный фрагмент в индексе не достигнет определённого размера. См. примечания по
max_primary_shard_size. -
min_primary_shard_docs - (Необязательно, целое число) Не производит смену, пока самый большой первичный фрагмент в индексе не достигнет определённого количества документов. См. примечания по
max_primary_shard_docs.
-
-
mappings -
(Необязательно, объект отображения) Отображение для полей в индексе. Если указано, это отображение может включать:
- Имена полей
- Типы данных полей
- Параметры отображения
См. Отображение.
Потоки данных не поддерживают этот параметр.
-
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, индекс удовлетворил условию.
-
-
lazy - (Логическое значение) Если
true, Elasticsearch не выполнил смену, но успешно пометил поток данных для переключения на следующее событие индексирования.
Примеры
Переключение потока данных
Следующий запрос безусловно переключает поток данных.
resp = client.indices.rollover(
alias="my-data-stream",
)
print(resp) response = client.indices.rollover( alias: 'my-data-stream' ) puts response
const response = await client.indices.rollover({
alias: "my-data-stream",
});
console.log(response); POST my-data-stream/_rollover
Следующий запрос переключает поток данных лениво, что означает, что поток данных будет переключен при следующем событии индексации. Это гарантирует, что изменения в отображении и настройках будут применены к поступающим данным, но избежит создания дополнительных индексов для потоков данных с медленной обработкой.
resp = client.indices.rollover(
alias="my-data-stream",
lazy=True,
)
print(resp) const response = await client.indices.rollover({
alias: "my-data-stream",
lazy: "true",
});
console.log(response); POST my-data-stream/_rollover?lazy
Следующий запрос переключает поток данных только в том случае, если текущий индекс записи соответствует одному или нескольким из следующих условий:
- Индекс был создан 7 или более дней назад.
- Индекс содержит 1000 или более документов.
- Наибольший первичный фрагмент индекса равен или больше 50 ГБ.
resp = client.indices.rollover(
alias="my-data-stream",
conditions={
"max_age": "7d",
"max_docs": 1000,
"max_primary_shard_size": "50gb",
"max_primary_shard_docs": "2000"
},
)
print(resp) response = client.indices.rollover(
alias: 'my-data-stream',
body: {
conditions: {
max_age: '7d',
max_docs: 1000,
max_primary_shard_size: '50gb',
max_primary_shard_docs: '2000'
}
}
)
puts response const response = await client.indices.rollover({
alias: "my-data-stream",
conditions: {
max_age: "7d",
max_docs: 1000,
max_primary_shard_size: "50gb",
max_primary_shard_docs: "2000",
},
});
console.log(response); POST my-data-stream/_rollover
{
"conditions": {
"max_age": "7d",
"max_docs": 1000,
"max_primary_shard_size": "50gb",
"max_primary_shard_docs": "2000"
}
} 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,
"lazy": false,
"conditions": {
"[max_age: 7d]": false,
"[max_docs: 1000]": true,
"[max_primary_shard_size: 50gb]": false,
"[max_primary_shard_docs: 2000]": false
}
} Переключение алиаса индекса с индексом записи
Следующий запрос создает <my-index-{now/d}-000001> и устанавливает его в качестве индекса записи для my-alias.
resp = client.indices.create(
index="<my-index-{now/d}-000001>",
aliases={
"my-alias": {
"is_write_index": True
}
},
)
print(resp) response = client.indices.create(
index: '<my-index-{now/d}-000001>',
body: {
aliases: {
"my-alias": {
is_write_index: true
}
}
}
)
puts response const response = await client.indices.create({
index: "<my-index-{now/d}-000001>",
aliases: {
"my-alias": {
is_write_index: true,
},
},
});
console.log(response); # PUT <my-index-{now/d}-000001>
PUT %3Cmy-index-%7Bnow%2Fd%7D-000001%3E
{
"aliases": {
"my-alias": {
"is_write_index": true
}
}
} Следующий запрос переключает алиас только в том случае, если текущий индекс записи соответствует одному или нескольким из следующих условий:
- Индекс был создан 7 или более дней назад.
- Индекс содержит 1000 или более документов.
- Наибольший первичный фрагмент индекса равен или больше 50 ГБ.
resp = client.indices.rollover(
alias="my-alias",
conditions={
"max_age": "7d",
"max_docs": 1000,
"max_primary_shard_size": "50gb",
"max_primary_shard_docs": "2000"
},
)
print(resp) response = client.indices.rollover(
alias: 'my-alias',
body: {
conditions: {
max_age: '7d',
max_docs: 1000,
max_primary_shard_size: '50gb',
max_primary_shard_docs: '2000'
}
}
)
puts response const response = await client.indices.rollover({
alias: "my-alias",
conditions: {
max_age: "7d",
max_docs: 1000,
max_primary_shard_size: "50gb",
max_primary_shard_docs: "2000",
},
});
console.log(response); POST my-alias/_rollover
{
"conditions": {
"max_age": "7d",
"max_docs": 1000,
"max_primary_shard_size": "50gb",
"max_primary_shard_docs": "2000"
}
} 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,
"lazy": false,
"conditions": {
"[max_age: 7d]": false,
"[max_docs: 1000]": true,
"[max_primary_shard_size: 50gb]": false,
"[max_primary_shard_docs: 2000]": false
}
} Если имена индексов алиаса используют дату и вы переключаете индексы с регулярным интервалом, вы можете использовать дату для сужения поиска. Например, следующий запрос нацелен на индексы, созданные в последние три дня.
resp = client.search(
index="<my-index-{now/d}-*>,<my-index-{now/d-1d}-*>,<my-index-{now/d-2d}-*>",
)
print(resp) response = client.search(
index: '<my-index-{now/d}-*>,<my-index-{now/d-1d}-*>,<my-index-{now/d-2d}-*>'
)
puts response const response = await client.search({
index: "<my-index-{now/d}-*>,<my-index-{now/d-1d}-*>,<my-index-{now/d-2d}-*>",
});
console.log(response); # 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.
resp = client.indices.create(
index="<my-index-{now/d}-000001>",
aliases={
"my-write-alias": {}
},
)
print(resp) response = client.indices.create(
index: '<my-index-{now/d}-000001>',
body: {
aliases: {
"my-write-alias": {}
}
}
)
puts response const response = await client.indices.create({
index: "<my-index-{now/d}-000001>",
aliases: {
"my-write-alias": {},
},
});
console.log(response); # PUT <my-index-{now/d}-000001>
PUT %3Cmy-index-%7Bnow%2Fd%7D-000001%3E
{
"aliases": {
"my-write-alias": { }
}
} Следующий запрос переключает алиас только в том случае, если текущий индекс соответствует одному или нескольким из следующих условий:
- Индекс был создан 7 или более дней назад.
- Индекс содержит 1000 или более документов.
- Наибольший первичный фрагмент индекса равен или больше 50 ГБ.
resp = client.indices.rollover(
alias="my-write-alias",
conditions={
"max_age": "7d",
"max_docs": 1000,
"max_primary_shard_size": "50gb",
"max_primary_shard_docs": "2000"
},
)
print(resp) response = client.indices.rollover(
alias: 'my-write-alias',
body: {
conditions: {
max_age: '7d',
max_docs: 1000,
max_primary_shard_size: '50gb',
max_primary_shard_docs: '2000'
}
}
)
puts response const response = await client.indices.rollover({
alias: "my-write-alias",
conditions: {
max_age: "7d",
max_docs: 1000,
max_primary_shard_size: "50gb",
max_primary_shard_docs: "2000",
},
});
console.log(response); POST my-write-alias/_rollover
{
"conditions": {
"max_age": "7d",
"max_docs": 1000,
"max_primary_shard_size": "50gb",
"max_primary_shard_docs": "2000"
}
} 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,
"lazy": false,
"conditions": {
"[max_age: 7d]": false,
"[max_docs: 1000]": true,
"[max_primary_shard_size: 50gb]": false,
"[max_primary_shard_docs: 2000]": false
}
} Указание настроек при переключении
Обычно вы используете шаблон индекса, чтобы автоматически настроить индексы, созданные при переключении. Если вы переключаете алиас индекса, вы используете API переключения для добавления дополнительных настроек индекса или перезаписи настроек в шаблоне. Потоки данных не поддерживают параметр settings.
resp = client.indices.rollover(
alias="my-alias",
settings={
"index.number_of_shards": 2
},
)
print(resp) response = client.indices.rollover(
alias: 'my-alias',
body: {
settings: {
'index.number_of_shards' => 2
}
}
)
puts response const response = await client.indices.rollover({
alias: "my-alias",
settings: {
"index.number_of_shards": 2,
},
});
console.log(response); 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/8.17/indices-rollover-index.html