Spec-Zone.ru › Elasticsearch 8
›Руководство по Elasticsearch [8.17] ›REST API ›API индексов

API Rollover

Новая справка по API

Для получения самых актуальных данных об API обратитесь к API индексов.

Создаёт новый индекс для потока данных или псевдонима индекса.

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 символов и нулевую заправку, независимо от имени предыдущего индекса.

Использование даты и времени с переролированием псевдонимов индексов

Если вы используете псевдоним индекса для данных временных рядов, вы можете использовать математику дат в имени индекса для отслеживания даты переролирования. Например, вы можете создать псевдоним, который указывает на индекс с именем <my-index-{now/d}-000001>. Если вы создаёте индекс 6 мая 2099 года, имя индекса — my-index-2099.05.06-000001. Если вы переролируете псевдоним 7 мая 2099 года, имя нового индекса — my-index-2099.05.07-000002. Пример см. в Переролирование псевдонима индекса с индексом записи.

Ожидание активных фрагментов

Переролирование создаёт новый индекс и подчиняется настройке 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API