8. ES API规约
8.1 多索引
通常可以用test1
、test2
、test3
这样的形式(或者用_all
表示所有索引),当然它也支持通配符(如:test*
、*test
或者te*t
),排除某些索引可以用-
符号,比如test*,-test3
(匹配所有的test开头的索引但不包括test3
),所有的多索引API都支持下面的url查询字符串参数:
ignore_unavailable
:如果指定索引不存在或者是封闭索引,这个参数可以控制这些索引是否可以被忽略,可以指定为true
或false
;allow_no_indices
:如果通配符索引表达式没有匹配到具体索引,这个参数可以控制是否失败,可以指定为true
或false
,不如foo*
,但是却没有以foo
开头的索引,据此可以设置为失败,这个参数同样适用于_all
、*
或者像test
这样具体的某个索引,如果一个别名指向封闭索引,则此设置也适用于别名;expand_wildcards
:控制通配符索引表达式可以匹配到哪种具体索引,如果指定了open
,则通配符表达式只能匹配到打开的索引,如果指定了closed
,则通配符表达式仅能匹配到封闭的索引,它还能同时指定为open
和closed
两个值。
8.2 索引名对日期和数学的支持
日期、数学索引名称解析可以让我们搜索一系列时间序列索引,而不是搜索所有时间序列索引并过滤结果或维护别名。限制搜索的索引数可以减少集群上的负载并提高执行性能。比如,在日志中搜索错误,就可以使用日期、数学名称模板将搜索限制为过去两天。几乎所有的API都有index
参数,index
参数可以支持日期和数学,大概的格式如下:
<static_name{date_math_expr{date_format|time_zone}}>
对上述的语句中的几个参数做如下说明:
static_name
:名称的静态文本部分;date_math_expr
:动态日期、数学数学表达式(动态计算日期);date_format
:呈现计算日期的格式(可选),默认是YYYY.MM.dd
格式;time_zone
:时区(可选),默认是UTC
。
下面是一个简单的例子:
# GET /<logstash-{
now/d}>/_search
GET /%3Clogstash-%7Bnow%2Fd%7D%3E/_search
{
"query" : {
"match": {
"test": "data"
}
}
}
【注意】
日期数学索引名称表达式必须包在尖括号中,并且所有特殊字符都应该是URI编码的,下面是具体的参照表:
特殊字符 | URI编码 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
下面是对2024年3月22日中午(UTC)不同参数对应的解析结果:
表达式 | 解析结果 |
---|---|
|
|