滚动索引
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-000001
或 my-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-000001 或 my-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_date 或 index.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
}
}