摘要
ElasticsearchRESTAPI使用HTTP协议,采用JOSN 格式。
3.1 多索引
大多数API都支持跨多个索引执行,可以使用简单的test1、test2、test3表示法(或对所
有索引执行,用_all)。它还支持通配符,例如test*或*test或te*t或*test*,以及“排
除”(-)功能,例如-test3。
所有多索引API都支持以下URL查询字符串参数:
.ignore_unavailable
控制是否忽略不可用索引,包括不存在的索引或已关闭的索引。可以设置为true或
false。
.allow_no_indices
当通配符索引表达式结果为空时,allow_no_indices控制请求是否失败。可以指定true
或false。例如,指定了通配符表达式foo*却没有以foo开头的索引可用,如果此设置为
true,请求将失败。当未指定_all、*或无索引时,此设置也适用。此设置也适用于别名,以
防别名指向关闭的索引。
.expand_wildcards
控制通配符索引表达式可以扩展到哪种具体索引。如果指定了open,则通配符表达式
将扩展为仅打开索引。如果指定了closed,则通配符表达式仅扩展为closed索引。也可以
指定这两个值(open,closed)以扩展到所有索引。
3.2 日期数学格式
索引名称支持日期解析,这样能够搜索一个时间范围内或某几段时间内的索引,而不是
搜索所有索引再筛选结果或维护别名。搜索的索引数量可以减少集群上的负载并提高
执行性能。例如,如果在日常日志中搜索错误信息,可以使用日期格式名称模板将搜索严格
在过去两天内。
几乎所有具有index参数的API都支持index参数值中包含日期数学格式。日期数学
索引名称具有以下形式:
第3章 API规范 57
static_name是索引名称的静态文本部分。
date_math_expr是动态日期数学表达式,用于动态计算日期。
date_format用来设置日期的可选格式。默认为yyyy.MM.dd格式,且应该与Java时
间兼容。请参考如下网站的资料:https://docs.oracle.com/javase/8/docs/api/java/time/
format/DateTimeFormatter.html。
time_zone用来设置时区。默认为UTC。
日期数学表达式解析是独立于区域设置的。因此,除了公历外,不可使用任何其他形式
的日历。
必须将日期数学格式索引名称表达式括在尖括号内,并且所有特殊字符都应进行URI
编码。例如:
#GET //_search
GET /%3Clogstash-%7Bnow%2Fd%7D%3E/_search
{
"query" : {
"match": {
"test": "data"
}
}
}
日期数学字符的百分比编码如表3-1所示。
表3-1 日期数学字符百分比编码
字 符URI编码
< %3C
> %3E
/ %2F
{ %7B
} %7D
字 符URI编码
| %7C
+ %2B
: %3A
, %2C
表3-2显示了日期数学索引名称的不同形式和解析后的最终索引名称,是在当前时间
为2024年3月22日中午,时区为UTC的情况下解析的。
表3-2 日期数学格式解析实例
日期数字索引模式解析结果
logstash-2024.03.22
logstash-2024.03.01
logstash-2024.03
logstash-2024.02
logstash-2024.03.23
Elasticsearch权58 威指南centimeters
Fet ft或fet Milimeter mm或milimeters
Inch in或inch Nauticalmile NM、nmi或nauticalmiles
Kilometer km或kilometers
Elasticsearch权66 威指南
3.3.12 模糊性
一些查询和API支持使用模糊参数(fuzziness)进行不准确的模糊匹配。
在查询text或keyword字段时,fuzziness被解释为编辑距离,也就是一个字符串需要
更改的字符数,以使其与另一个字符串相同。
fuzziness参数可以指定为如下两种值。
①0,1,2:允许的优选编辑距离(或编辑次数)。
② AUTO:根据Term 的长度生成编辑距离。可以选择自动提供低距离和高距离参
数:AUTO:[low],[high]。如果未指定,默认值为3和6,相当于AUTO:3,6,表示长度
如下所示。
.0..2必须准确匹配。
.3..5编辑距离1。
. >5编辑距离2。
. AUTO 一般应为fuzziness的优选值。
3.3.13 启用堆栈跟踪
默认情况下,当请求返回错误时,Elasticsearch不包括错误的堆栈跟踪。可以通过将
error_trace参数设置为true来启用堆栈跟踪。例如,默认情况下,将无效的size参数发送
到_searchAPI时:
POST /bank/_search?size=surprise_me
响应如下:
{
"error": {
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "Failed to parse int parameter [s