Link Search Menu Expand Document Documentation Menu

滚动索引

1.0 版引入

翻转索引 API 操作根据 wait_for_active_shards 设置为数据流或索引别名创建新索引。

端点

POST /<rollover-target>/_rollover/
POST /<rollover-target>/_rollover/<target-index>

翻转类型

您可以翻转数据流、带有一个索引的索引别名或带有写入索引的索引别名。

数据流

当您对数据流执行翻转操作时,API 会为该流生成一个新的写入索引。同时,该流的先前写入索引会转换为一个常规备份索引。此外,翻转过程会增加数据流的生成计数。数据流翻转不支持在请求正文中指定索引设置。

带有一个索引的索引别名

当对与单个索引关联的索引别名发起翻转时,API 会生成一个新索引,并将原始索引与该别名解除关联。

带有写入索引的索引别名

当索引别名引用多个索引时,必须将其中一个索引指定为写入索引。在翻转期间,API 会创建一个新的写入索引,并将其 is_write_index 属性设置为 true,同时通过将其 is_write_index property 设置为 false 来更新先前的写入索引。

别名索引名称递增

在索引别名翻转过程中,如果您未指定自定义名称,并且当前索引的名称以连字符后跟数字结尾(例如,my-index-000001my-index-3),则翻转操作将自动为新索引的名称递增该数字。例如,翻转 my-index-000001 将生成 my-index-000002。数字部分总是用前导零填充,以确保六个字符的长度一致。

使用日期数学进行索引翻转

在使用索引别名处理时间序列数据时,您可以在索引名称中使用日期数学来跟踪翻转日期。例如,您可以创建一个指向 my-index-{now/d}-000001 的别名。如果您在 2029 年 6 月 11 日创建别名,则索引名称将是 my-index-2029.06.11-000001。如果在 2029 年 6 月 12 日进行翻转,新索引将命名为 my-index-2029.06.12-000002。有关实际示例,请参阅翻转带有写入索引的索引别名

路径参数

下表列出了可用的路径参数。

参数 数据类型 描述
<rollover-target> 字符串 要翻转的数据流或索引别名的名称。必填。
<目标索引> 字符串 要创建的索引的名称。支持日期数学。数据流不支持此参数。如果别名当前写入索引的名称不以 - 和数字结尾,例如 my-index-000001my-index-2,则此参数是必需的。

查询参数

下表列出了可用的查询参数。

参数 数据类型 描述
cluster_manager_timeout 时间 等待连接到集群管理器节点的时间量。默认值为 30s
timeout 时间 等待响应的时间。默认值为 30s
wait_for_active_shards 字符串 在 OpenSearch 处理请求之前必须可用的活动分片数量。默认值为 1(仅主分片)。您也可以设置为 all 或正整数。大于 1 的值需要副本。例如,如果您指定的值为 3,则索引必须有两个副本分布在另外两个节点上,操作才能成功。

请求正文字段

支持以下请求正文字段。

alias

alias 参数指定别名名称作为键。当请求正文中存在 template 选项时,它是必需的。对象主体包含以下可选参数。

参数 类型 描述
filter 查询 DSL 对象 限制别名可访问文档数量的查询。
index_routing 字符串 将索引操作路由到特定分片的值。指定时,会覆盖索引操作的 routing 值。
is_hidden 布尔型 隐藏或取消隐藏别名。当 true 时,别名被隐藏。默认值为 false。别名的索引必须具有此设置的匹配值。
is_write_index 布尔型 指定写入索引。当 true 时,该索引是别名的写入索引。默认值为 false
路由 字符串 用于将索引和搜索操作路由到特定分片的值。
search_routing 字符串 将搜索操作路由到特定分片。指定时,会覆盖搜索操作的 routing

mappings

mappings 参数指定索引字段映射。它是可选的。有关更多信息,请参阅映射和字段类型

conditions

conditions 参数是一个可选对象,用于定义触发翻转的条件。如果提供,OpenSearch 仅在当前索引满足一个或多个指定条件时才进行翻转。如果省略,则翻转将无条件发生,没有先决条件。

对象主体支持以下参数。

参数 数据类型 描述
max_age 时间单位 在达到索引创建以来的最大经过时间后触发翻转。即使索引原始日期配置为自定义日期(例如使用 index.lifecycle.parse_origination_dateindex.lifecycle.origination_date 设置时),经过时间也始终根据索引创建时间计算。可选。
max_docs 整数 在达到指定的最大文档数后触发翻转,不包括自上次刷新以来添加的文档和副本分片中的文档。可选。
max_size 字节单位 当索引达到指定大小(计算为所有主分片的总大小)时触发翻转。副本不计入在内。使用 _cat indices API 并检查 pri.store.size 值以查看当前索引大小。可选。

settings

settings 参数指定索引配置选项。有关更多信息,请参阅索引设置

示例请求

以下示例演示了如何使用翻转索引 API。当满足一个或多个指定条件时,会发生翻转

  • 索引创建于 5 天或更早。
  • 索引包含 500 个或更多文档。
  • 索引大小为 100 GB 或更大。

翻转数据流

如果当前写入索引满足以下任何指定条件,则以下请求将翻转数据流

POST my-data-stream/_rollover
{
  "conditions": {
    "max_age": "5d",
    "max_docs": 500,
    "max_size": "100gb"
  }
}

翻转带有写入索引的索引别名

以下请求创建日期时间索引并将其设置为 my-alias 的写入索引

PUT <my-index-{now/d}-000001>
PUT %3Cmy-index-%7Bnow%2Fd%7D-000001%3E
{
  "aliases": {
    "my-alias": {
      "is_write_index": true
    }
  }
}

下一个请求使用别名执行翻转

POST my-alias/_rollover
{
  "conditions": {
    "max_age": "5d",
    "max_docs": 500,
    "max_size": "100gb"
  }
}

在翻转期间指定设置

在大多数情况下,您可以使用索引模板来自动配置翻转操作期间创建的索引。但是,在翻转索引别名时,您可以使用翻转索引 API 来引入其他索引设置或通过发送以下请求来覆盖模板中定义的设置

POST my-alias/_rollover
{
  "settings": {
    "index.number_of_shards": 4
  }
}

示例响应

OpenSearch 返回以下响应,确认除 max_size 之外的所有条件均已满足

{
  "acknowledged": true,
  "shards_acknowledged": true,
  "old_index": ".ds-my-data-stream-2029.06.11-000001",
  "new_index": ".ds-my-data-stream-2029.06.12-000002",
  "rolled_over": true,
  "dry_run": false,
  "conditions": {
    "[max_age: 5d]": true,
    "[max_docs: 500]": true,
    "[max_size: 100gb]": false
  }
}