索引名中的日期数学支持

日期数学索引名字解析允许你搜索一系列时序索引,而不是搜索所有时序索引并过滤结果或维护别名。限制搜索的索引数可以减少集群上的负载并改进执行性能。例如,如果你在每日日志中搜索错误,你可以使用日期数学名字模板来限制搜索为过去两天。

几乎所有具有 index(索引)参数的 API,都支持 index(索引)参数值中的日期数学。

日期数学索引名字采用以下形式:

  1. <static_name{date_math_expr{date_format|time_zone}}>

其中:

static_name 名字的静态文字部分
date_math_expr 动态计算日期的动态日期数学表达式
date_format 显示计算日期的可选格式。默认为 yyyy.MM.dd。格式应与 java-time 兼容。https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html
time_zone 可选的时区。默认为 utc

?> 注意 date_format(日期格式)中使用的大小写字母。例如,mm 表示分钟,MM表示月份。类似的,hh 表示 1-12 范围内的小时,与 AM/PM 组合使用,而 HH 表示 0-23 24小时范围内的小时。

日期数学表达式与区域无关。因此,不以使用格列高利历之外的日历。

必须将日期数学索引名字表达式包在尖括号内,并且所有特殊字符都应进行 URI 编码。例如:

  1. # PUT /<my-index-{now/d}>
  2. PUT /%3Cmy-index-%7Bnow%2Fd%7D%3E

?> 日期数学字符的百分比编码
日期格式特定字符必须为 URI 编码,如下:

< %3C
> %3E
/ %2F
{ %7B
} %7D
| %7C
+ %2B
: %3A
, %2C

以下示例显示日期数学索引名字的不同格式,且给定当前时间为 UTC 2024年3月22日中午,它们解析为最终索引名字。

表达式 解析为
logstash-2024.03.22
logstash-2024.03.01
logstash-2024.03
logstash-2024.02
logstash-2024.03.23

为了在索引名字模板的静态部分中使用字符 { 和 },请使用反斜杠 \ 转义,例如:

  • <elastic\{ON\}-{now/M}> 解析为 elastic{ON}-2024.03.01

以下例子展示了一个搜索请求,该请求搜索过去三天的 Logstash 索引,假设索引使用默认的 Logstash 索引名字格式 logstash-yyyy.MM.dd

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

原文链接