《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.13.Rollover API(3) https://developer.aliyun.com/article/1230207
指定目标索引名称
如果 是索引别名,并且绑定的索引名称以 - 结尾;如果不指定目标索引,发生滚动时生成的新索引名称为 indexName-6 位数字,每滚动一次数字自增一次。
例如索引为logs-1(或者logs-000001),执行滚动后新的索引名字为logs-000002,6位数字低位自增高位补 0。
如果旧的索引名称不满足indexName- 结尾,则执行滚动必须指定新索引名字;
示例如下:
# my_alias绑定的索引索引名称不满足indexName-<number>格式 #必须指定索引my_new_index_name POST /my_alias/_rollover/my_new_index_name { "conditions": { "max_age": "7d", "max_docs": 2, "max_size": "5gb" } }
基于 date math 滚动
如果 是索引别名,使用 date math 根据索引滚动的当前日期来命名滚动索引;在某些场景中是非常有用的,比如定时按天删除索引、按天查询数据等。rollover API 支持 date math,但是要求索引名称必须以日期 - 结尾,
例如:logstash-2021.05.06-1;以这种格式命名的主要是方便在任何时候执行滚动,索引名称自增。
示例如下:
# PUT /<logs-{now/d}-1> with URI encoding: PUT /%3Clogs_%7Bnow%2Fd%7D-1%3E #备注1 { "aliases": { "logs_write": {} } } PUT logs_write/_doc/1 { "message": "a dummy log" } POST logs_write/_refresh # 立即执行 _rollover POST /logs_write/_rollover #备注2 { "conditions": { "max_docs": 1, "max_age": "1d", "max_size": "5gb" } }
创建一个索引取今天的日期,logs_2021.05.06-1执行滚动操作,如果立即执行,则新索引名为logs_2021.05.06-000002;如果等到24小时之后执行索引名称为logs_2021.05.07-000002
你可以按照 date math 文档的说明去使用这些索引。
例如,你需要搜索过去三天索引的数据,你可以按照如下的书写方式:
# GET /<logs-{now/d}-*>,<logs-{now/d-1d}-*>,<logs-{now/d-2d}-*>/_search GET /%3Clogs-%7Bnow%2Fd%7D-*%3E%2C%3Clogs-%7Bnow%2Fd-1d%7D-*%3E%2C%3Clogs-%7Bnow%2Fd-2d%7D-*%3E/_search
Dry run
rollover API支持dry_run模式,该模式主要用于条件检测。比如想检测索引是否满足设定的条件完成滚动。
示例如下:
POST /logs_write/_rollover?dry_run { "conditions" : { "max_age": "7d", "max_docs": 1000, "max_size": "5gb" } }
返回值如下:
{ "acknowledged" : false, "shards_acknowledged" : false, "old_index" : "logs-000002", #当前索引 "new_index" : "logs-000003",# 将要新生成的索引 "rolled_over" : false, #是否完成滚动 "dry_run" : true, # 是否为检测模式 "conditions" : { "[max_size: 5gb]" : false, "[max_docs: 1000]" : false, "[max_age: 7d]" : false } }
《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.13.Rollover API(5) https://developer.aliyun.com/article/1230205