滚动索引一般可以与索引模板结合使用,实现按一定条件自动创建索引。
1.当现有索引被认为太大或太旧时,滚动索引API会将别名滚动到新的索引。
PUT /logs-000001 { "aliases": { "logs_write": {} } } # Add > 1000 documents to logs-000001 POST /logs_write/_rollover { "conditions": { "max_age": "7d", "max_docs": 1000, "max_size": "5gb" } }
创建索引 logs-0000001 别名为 logs_write.
如果 logs_write 指向的索引是在7天以前创建的,或者包含1000个以上的文档,则会创建 logs-000002索引,并更新logs_write别名以指向logs-000002.
返回值 { "acknowledged": true, "shards_acknowledged": true, "old_index": "logs-000001", "new_index": "logs-000002", "rolled_over": true, "dry_run": false, "conditions": { "[max_age: 7d]": false, "[max_docs: 1000]": true } }
2.如果现有索引的名称以 - 和数字结尾。 logs-000001 - 然后新索引的名称将遵循相同的模式,增加数字(logs-000002)。 无论旧索引名称如何,编号为零填充长度为6。
如果旧名称与此模式不匹配,则必须按照如下所示,指定新索引的名称:
POST /my_alias/_rollover/my_new_index_name { "conditions": { "max_age": "7d", "max_docs": 1000, "max_size": "5gb" } }
3.使用日期计算: 根据索引滚动的日期来命名滚动索引是有用的技术,例如 logstash-2016.02.03
.。 滚动API支持日期,但要求索引名称以一个破折号后跟一个数字,例如 logstash-2016.02.03-1,每次索引滚动时都会增加。 例如
# PUT /<logs-{now/d}-1> with URI encoding: PUT /%3Clogs-%7Bnow%2Fd%7D-1%3E { "aliases": { "logs_write": {} } } PUT logs_write/_doc/1 { "message": "a dummy log" } POST logs_write/_refresh # Wait for a day to pass POST /logs_write/_rollover { "conditions": { "max_docs": "1" } }
4.索引名称对日期计算的支持:
日期计算的格式
<static_name{date_math_expr{date_format|time_zone}}>
上述的说明 :
位置
|
说明
|
---|---|
static_name | 是名称的 static text( 静态文本)部分 |
date_math_expr | 是动态计算日期的动态 date math 表达式 |
date_format | 是计算日期应呈现的可选格式。默认是 YYYY.MM.dd |
time_zone | 是可选的时区。默认为 utc 。 |
必须将 date math 索引名称表达式包含在尖括号中,并且所有的特殊字符都应进行 URI 编码。例如 :
# GET /<logstash-{now/d}>/_search GET /%3Clogstash-%7Bnow%2Fd%7D%3E/_search { "query" : { "match": { "test": "data" } } }
用于 date 舍入的特殊字符必须按照如下 URI 编码 :
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
以下示例显示了不同形式索引表达式和它们解析的 final index names(最终索引名称),给定的当前时间是 2024 年 3 月 22 日 utc
Expression | Resolves to |
---|---|
|
|
|
|
|
|
|
|
|
|
如果索引中需要使用{}需要进行转义处理
<elastic\\{ON\\}-{now/M}> resolves to elastic{ON}-2024.03.01
5.滚动API支持dry_run模式,可以在不执行实际滚动的情况下检查请求条件:
PUT /logs-000001 { "aliases": { "logs_write": {} } } POST /logs_write/_rollover?dry_run { "conditions" : { "max_age": "7d", "max_docs": 1000, "max_size": "5gb" } }