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

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

Использование математических функций даты с переключениями алиасов индексов

Если вы используете алиас индекса для данных временных рядов, вы можете использовать математические функции даты в имени индекса для отслеживания даты переключения. Например, вы можете создать алиас, указывающий на индекс с именем <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.
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

Spec-Zone.ru

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