翻转 API

数据流索引别名创建一个新的索引。

  1. POST my-data-stream/_rollover

请求

POST /<rollover-target>/_rollover/

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

前置条件

  • 如果 Elasticsearch 安全特性启用,你对翻转目标必须有 manage 索引权限

描述

?> 我们推荐使用 ILM 的翻转操作来自动执行翻转。参阅索引生命周期

翻转 API 为数据流或索引别名创建一个新索引。API 的行为依赖翻转的目标。

翻转数据流

如果你翻转数据流,API 将为数据流创建一个新的写索引。流的前一个写索引会变为常规的协助索引。翻转还会增加数据流的辈分(generation)。

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

?> 在 Elasticsearch 7.9 之前,你通常会使用带有写索引的索引别名来管理时序数据。数据流取代了这一功能,需要较少的维护,并自动与数据层集成。 参阅转换索引别名为数据流

如果一个索引别名指向多个索引,其中一个索引必须为写索引。翻转 API 为别名创建一个新的写索引,并将它的 is_write_index 设置为 true。API 也会将前一个写索引设置 is_write_indexfalse

翻转带有一个索引的索引别名

如果你翻转仅指向一个索引的索引别名,API 将为别名创建新索引,并从别名移除原始索引。

为别名增加索引名字

当你翻转索引别名时,你可以为新索引指定名字。如果你不指定名字,且当前索引以 - 和数字结尾,比如 my-index-000001my-index-3,新的索引名字会增加数字。例如,你翻转一个带有当前索引名字为 my-index-000001 的别名,翻转操作会创建一个名为 my-index-000002 的新索引。无论前一个索引名字是什么,这个数字总是 6 个字符并以 0 填充。

将日期数学与索引别名翻转一起使用 如果你为时序数据使用索引别名,你可以在索引名字中使用日期数学以追踪翻转日期。例如,你可以创建一个指向索引名为 <my-index-{now/d}-000001> 的别名。如果你在2099年5月6日创建索引,索引名为 my-index-2099.05.06-000001。如果你在2099年5月7日翻转这个别名,新索引的名字为 my-index-2099.05.07-000002。例如,参阅翻转带有写索引的索引别名

等待激活分片

翻转创建一个新的索引,并受限于设置 wait_for_active_shards

路径参数

  • <rollover-target>

(必需的,字符串)待翻转的数据流或索引别名的名字。

  • <target-index>

(可选的,字符串)创建的目标索引名称。支持日期数学。数据流不支持这个参数。

如果别名的当前写索引的名字不以 - 和数字结尾,例如 my-index-000001my-index-3,这个参数是必需的。

索引名字必须符合以下约定:

  1. 只能是小写字符
  2. 不能包含字符:\/*?"<>|`(空格)、,#`
  3. 7.0 之前索引可以包含冒号(:),但在 7.0 之后不推荐。
  4. 不能以 -_+ 开头
  5. 不能是 ...
  6. 长度不能超过 255 字节(注意是字节,所以多字节字符会更快达到 255 的限制)
  7. 名字以 . 开头不推荐,除非由插件管理的隐藏索引和内部索引

查询参数

  • dry_run

(可选,布尔值)如果为 true,则检查当前索引是否匹配一个或多个指定条件(conditions),但不执行翻转。默认为 false

  • include_type_name

[7.0.0开始不推荐](可选,布尔值)如果为 true,映射体中需要映射类型。默认为 false

  • wait_for_active_shards (可选,字符串)在操作执行之前必须活动的分片复制数量。设置为 all 或任何正整数,最大值为索引分片总数(number_of_replicas+1)。默认为:1,主分片。

  • master_timeout (可选,时间单位)等待连接到主节点的时间。如果在超时过期前没有收到响应,则请求失败并返回错误。默认为 30s

  • timeout (可选,时间单位)等待响应的时间。如果在超时过期之前没有收到响应,则请求失败并返回错误。默认为 30s

请求体

  • aliases

(可选,别名对象)包含目标索引的索引别名。索引别名名字支持日期数学

数据流不支持这个参数。

  • conditions

(可选,对象)翻转的条件。如果指定,Elasticsearch 仅在当前索引满足以下一个或多个条件时执行翻转。如果参数未指定,Elasticsearch 无条件执行翻转。

!> 为了触发翻转,当前索引在请求时必须满足这些条件。Elasticsearch 不会在 API 响应后监视索引。要自动化翻转,改用 ILM 的翻转

conditions 的属性

  • max_age

    (可选,时间单位)在达到创建索引所用的最长时间后触发翻转。从索引创建时间开始,始终计算运行的时间,即使索引起始日期配置为自定义日期,例如当使用设置 index.lifecycle.parse_origination_dateindex.lifecycle.origination_date

  • max_docs

    (可选,整数)在达到指定的最大文档数后触发翻转。自上次刷新以来添加的文档不包括在文档计数中。文档计数不包括副本分片中的文档。

  • max_size

    (可选,字节单位)当索引达到一定大小时触发翻转。这是索引中所有主分片的总大小。副本不会被计算到最大索引大小。

    ?> 为查看当前索引大小,可以使用 _cat indices API。pri.store.size 值显示所有主分片的组合大小。

  • max_primary_shard_size

    (可选,字节单位)当索引中最大的主分片达到一定大小时触发翻转。主分片在索引中的最大值。同 max_size 一样,副本会被忽略。

    ?> 为了查看当前分片大小,可以使用 [_cat shards] API。store 值展示每个分片大小,prirep 指示一个分片是主分片(p)还是副本(r)。

  • mappings (可选,映射对象)索引中字段映射。如果指定,映射可以包含:
  1. 字段名字
  2. 字段数据类型
  3. 映射参数

参阅映射

数据流不支持这个参数。

数据流不支持这个参数。

请求体

  • acknowledged

(布尔值)如果为 true,请求在 timeout 周期内接收来自主节点的响应。

  • shards_acknowledged

(布尔值)如果为 true,请求在 master_timeout 周期内接收来自激活分片的响应。

  • old_index

(字符串)数据流或索引别名的前一个索引。对数据流和有写索引的索引别名,指前一个写索引。

  • new_index

(字符串)翻转创建的索引。对数据洲和有写索引的索引别名,指当前写索引。

  • rolled_over

(布尔值)如果为 true,数据流或索引别名翻转。

  • dry_run

(布尔值)如果为 true,Elasticsearch 不执行翻转。

  • condition

(对象)指定在请求的 conditions 里的每个条件的结果。如果未指定任何条件,这是一个空对象。

condition 的属性

  1. - `<condition>`
  2. (布尔值)键是每个条件。值是它的结果。如果为 `true`,该索引在翻转时满足条件。

示例

翻转数据流

以下请求无条件翻转数据流。

  1. POST my-data-stream/_rollover

如果当前写索引满足一个或多个以下的条件,以下的请求只翻转数据流:

  • 索引在 7 天或更早前创建

  • 索引包含 1,000 或更多的文档

  • 索引最大的主分片是 50GB 或更大

  1. POST my-data-stream/_rollover
  2. {
  3. "conditions": {
  4. "max_age": "7d",
  5. "max_docs": 1000,
  6. "max_primary_shard_size": "50gb"
  7. }
  8. }

API 返回:

  1. {
  2. "acknowledged": true,
  3. "shards_acknowledged": true,
  4. "old_index": ".ds-my-data-stream-2099.05.06-000001",
  5. "new_index": ".ds-my-data-stream-2099.05.07-000002",
  6. "rolled_over": true,
  7. "dry_run": false,
  8. "conditions": {
  9. "[max_age: 7d]": false,
  10. "[max_docs: 1000]": true,
  11. "[max_primary_shard_size: 50gb]": false
  12. }
  13. }

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

以下请求创建 <my-index-{now/d}-000001>,且将它设置为 my-alias 的写索引。

  1. # PUT <my-index-{now/d}-000001>
  2. PUT %3Cmy-index-%7Bnow%2Fd%7D-000001%3E
  3. {
  4. "aliases": {
  5. "my-alias": {
  6. "is_write_index": true
  7. }
  8. }
  9. }

如果当前写索引满足一个或多个以下的条件,以下的请求只翻转别名:

  • 索引在 7 天或更早前创建

  • 索引包含 1,000 或更多的文档

  • 索引最大的主分片是 50GB 或更大

  1. POST my-alias/_rollover
  2. {
  3. "conditions": {
  4. "max_age": "7d",
  5. "max_docs": 1000,
  6. "max_primary_shard_size": "50gb"
  7. }
  8. }

API 返回:

  1. {
  2. "acknowledged": true,
  3. "shards_acknowledged": true,
  4. "old_index": "my-index-2099.05.06-000001",
  5. "new_index": "my-index-2099.05.07-000002",
  6. "rolled_over": true,
  7. "dry_run": false,
  8. "conditions": {
  9. "[max_age: 7d]": false,
  10. "[max_docs: 1000]": true,
  11. "[max_primary_shard_size: 50gb]": false
  12. }
  13. }

如果别名的索引名使用日期数学,并且你以固定的间隔翻转索引,则可以使用日期数学缩小搜索范围。例如,以下搜索目标索引是在过去三天创建的。

  1. # GET /<my-index-{now/d}-*>,<my-index-{now/d-1d}-*>,<my-index-{now/d-2d}-*>/_search
  2. 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

  1. # PUT <my-index-{now/d}-000001>
  2. PUT %3Cmy-index-%7Bnow%2Fd%7D-000001%3E
  3. {
  4. "aliases": {
  5. "my-write-alias": { }
  6. }
  7. }

如果当前索引满足一个或多个以下的条件,以下的请求只翻转别名:

  • 索引在 7 天或更早前创建

  • 索引包含 1,000 或更多的文档

  • 索引最大的主分片是 50GB 或更大

  1. POST my-write-alias/_rollover
  2. {
  3. "conditions": {
  4. "max_age": "7d",
  5. "max_docs": 1000,
  6. "max_primary_shard_size": "50gb"
  7. }
  8. }

API 返回:

  1. {
  2. "acknowledged": true,
  3. "shards_acknowledged": true,
  4. "old_index": "my-index-2099.05.06-000001",
  5. "new_index": "my-index-2099.05.07-000002",
  6. "rolled_over": true,
  7. "dry_run": false,
  8. "conditions": {
  9. "[max_age: 7d]": false,
  10. "[max_docs: 1000]": true,
  11. "[max_primary_shard_size: 50gb]": false
  12. }
  13. }

在翻转时指定设置

典型的,你可以使用索引模板在翻转时自动配置索引创建。如果你翻转索引别名,你可以使用翻转 API 添加额外的索引设置或重写在模板中的设置。数据流不支持 settings 参数。

  1. POST my-alias/_rollover
  2. {
  3. "settings": {
  4. "index.number_of_shards": 2
  5. }
  6. }

原文链接