Date math support in index names(索引名称对 Date 和 Math 的支持)

Date math 索引名称解析可以让您搜索一系列 time-series indices(时间序列索引),而不是搜索所有时间序列索引并过滤结果或维护 aliases(别名)。限制搜索的索引数量减少了集群上的集群上的负载,并提高了执行性能。例如,如果您在日常日志中 searching for errors(搜索错误 ),则可以使用 date math name 模板将搜索限制为过去两天。

几乎所有的具有索引参数的 API 都支持在 index parameter value(索引参数值)中包含 date math

date math 索引名称采用以下形式 : 

<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
curl -XGET 'localhost:9200/%3Clogstash-%7Bnow%2Fd%7D%3E/_search?pretty' -H 'Content-Type: application/json' -d'
{
  "query" : {
    "match": {
      "test": "data"
    }
  }
}
'

Note(注意):

date math 字符的百分号编码

用于 date 舍入的特殊字符必须按照如下 URI 编码 :

字符 编码
&lt; %3C
> %3E
/ %2F
{ %7B
} %7D
| %7C
+ %2B
: %3A
, %2C

以下示例显示了不同形式的 date math index names(日期数学索引名称)和它们解析的 final index names(最终索引名称),它们给定的当前时间是 2024 22 日中午 utc

表达式 解析结果
<logstash-{now/d}> logstash-2024.03.22
<logstash-{now/M}> logstash-2024.03.01
<logstash-{now/M{YYYY.MM}}> logstash-2024.03
<logstash-{now/M-1M{YYYY.MM}}> logstash-2024.02
<logstash-{now/d{YYYY.MM.dd|+12:00}}> logstash-2024.03.23

为了在索引名称模板的 static part(静态部分)中使用字符 { 和 } ,使用* * 对其进行转义,例如 : 

<elastic\\{ON\\}-{now/M}> resolves to elastic{ON}-2024.03.01

下面的示例显示了一个搜索请求,搜索 LogStash 索引在过去的三天里,假设索引使用默认的 LogStash 索引名称格式, logstash-YYYY.MM.dd 。

# GET /<logstash-{now/d-2d}>,<logstash-{now/d-1d}>,<logstash-{now/d}>/_search
GET /%3Clogstash-%7Bnow%2Fd-2d%7D%3E%2C%3Clogstash-%7Bnow%2Fd-1d%7D%3E%2C%3Clogstash-%7Bnow%2Fd%7D%3E/_search
{
  "query" : {
    "match": {
      "test": "data"
    }
  }
}