(本API基于Elasticsearch7.7版本)
从本节开始我们借助Kibana工具编写api
1、多索引支持
大部分的API可以支持跨多个索引查阅索引信息
例如:
GET /test1,test2,test2/_search
{
"query":{
"query_string": {
"fields": ["message"],
"query": "WARN"
}
}
}
它还支持通配符
例如:
GET /test*/_search
{
"query":{
"query_string": {
"fields": ["message"],
"query": "WARN"
}
}
}
并且它还有排除的能力使用-
例如:我想查询所有的test索引并且不查询test3可以这样写
GET /test*,-test3/_search
{
"query":{
"query_string": {
"fields": ["message"],
"query": "WARN"
}
}
}
所有的多索引API支持以下查询参数
参数 | 是否必填 | 类型 | 默认值 | 说明 |
---|---|---|---|---|
ignore_unavailable | 可选 | boolean | false | 如果为true,则响应中不包括缺失或闭合的索引 |
allow_no_indices | 可选 | boolean | false | 如果为true,则请求中不存在的索引时不会返回错误 |
expand_wildcards | 可选 | string | … | 控制通配符表达式可以扩展到哪种索引。当用逗号分隔时,接受多个值,如“open”、“hidden”。有效值为:all 、open 、closed 、hidden 、none |
ignore_throttled | 可选 | boolean | false | 某些API使用 |
2、索引名称支持日期运算
索引按日期分片之后可以提高查询性能,例如你需要搜索每日错误日志,那么你可以通过索引名称进行日期限定。技术所有的API都支持日期运算,日期索引名称格式如下:
<static_name{date_math_expr{date_format|time_zone}}>
参数解析
参数 | 说明 |
---|---|
static_name | 任意的索引名称 |
date_math_expr | 动态的日期表达式 |
date_format | 日期格式化,默认yyyy.MM.dd |
time_zone | 时区,默认utc |
举例:查询当天索引数据
#<service-order-{now/d{yyyy-MM-dd}}>
#进行urlencode之后 变成%3cservice-order-%7bnow%2fd%7byyyy-MM-dd%7d%7d%3e
GET /%3cservice-order-%7bnow%2fd%7byyyy-MM-dd%7d%7d%3e/_search
{
"query":{
"query_string": {
"fields": ["name"],
"query": "Yao"
}
}
}
当然你可以自己构建更为复杂的查询,这边我就贴一个简单的例子,剩下的自己动手实验下。
3、Cron表达式
不知道这个定时器有什么用
表达式格式如下,使用的规范是 Quartz cron expressions,没错就是你熟悉的quarz
<seconds> <minutes> <hours> <day_of_month> <month> <day_of_week> [year]
既然大家都熟悉不做过多阐述,我还没用到这个功能。
4、公共选项
- Pretty Results 使用pretty格式美化返回结果,使用
?pretty=true
; - Human readable output 人类可读输出,例如时间,单位等。使用
?human=true
; - date Math 日期运算
- Response Filtering 响应过滤器,使用
?filter_path=
,支持通配符,或者精确指定,即将返回结果进行过滤,用以精简返回。 - Flat Settings 扁平化setting,
GET customer/_settings?flat_settings=true
返回结果将变成如下格式,你也可以不加后缀比较下看看
{
"customer" : {
"settings" : {
"index.creation_date" : "1590150410219",
"index.number_of_replicas" : "1",
"index.number_of_shards" : "1",
"index.provided_name" : "customer",
"index.uuid" : "zcyLZYomRvWTyvq2RuzhvA",
"index.version.created" : "7050199"
}
}
}
- Parameters Rest参数遵循下划线大小写约定
- Boolean Values 所有REST API参数支持字符串的boolean值作为真正的boolean值。
- Number Values RestApi支持数字类型使用字符串表示
- Time units 时间单位表
d/天
,h/小时
,m/分钟
,s/秒
,ms/毫秒
,micros/微秒
,nanos/纳秒
。 - Byte size units 字节大小单位
b/Bytes
,kb/Kilobytes
,mb/Megabytes
,gb/Gigabytes
,tb/Terabytes
,pbPetabytes
- 其他单位不多介绍,国际标准
- Fuzziness 模糊性 AUTO:[low],[high]
- Enabling stack traces 启动堆栈跟踪
?error_trace=true
可以获取详细报错信息 - Request body in query string
- Content-Type Requirements
5、基于URL访问控制
基于url访问控制可以提高访问安全性,但是对于将索引通过body传入的情况,url无法进行访问控制,你可以通过在elasticsearch.yml中设置rest.action.multi.allow_explicit_index: false
来拒绝使用body指定索引。