1、查询规则
(1)命令行界面查询:
curl -XGET/-XPOST ip地址:端口号/集群索引名/_search?q=*&pretty
(2)Postman查询:
Step1:POST/GET ip地址:端口号/集群索引名/_search
Step2:Body体中输入ES查询语句
2、size字段:指定输出size条查询结果
“size”:n
3、_source字段:指定输出的字段
“_source”:[“”,””,””]
4、range范围查询:
- gte:大于等于
- gt:大于
- lte:小于等于
- lt:小于
5、wildcard通配符查询
?用来匹配任意字符
*用来匹配零个或者多个字符
6、sort排序
7、使用match字段的时候会被分词,term不会分词
8、ES聚合(第一个字段field):
- 指标聚合:max、min、avg、sum、status、value_count(统计⾮空字段的⽂档数)
- 桶聚合:terms(分组group by)、filter-term(相当于where,过滤结果)、filters-term-term...、range
- date_histogram聚合
9、date_histogram聚合(按时间间隔统计。支持 year,quarter,month,week ,day 等间隔统计 及时区设置。)
- interval字段支持多种关键字:`year`, `quarter`, `month`, `week`, `day`, `hour`, `minute`, `second`
- 通过设置format对返回的结果进行格式化,返回结果中,key_as_string是格式化后的日期,key显示了是日期时间戳
- time_zero:ES中的时区表示
- min_doc_count:默认值0;返回最小的文档数。强制返回空数据。如果是0,时间间隔内缺少数据,则自动补充0.一般场景就是返回空数据,减少程序的处理。extended_bounds:扩展数据范围,此值只有当min_doc_count 为0时才具有意义。此值与min_doc_count一起使用,是强制返回空数据
10、terms聚合(group by分组):
(1)根据一个字段聚合
“terms”:{“field”:”字段名”}
(2)根据多个字段聚合
"terms":{"script":"doc['字段名.keyword'].value"+'#split#'+doc['字段名.keyword'].value"}
11、使用curl命令时,单双引号混用的时候要使用“\u0027”来转义单引号
12、script对字符串进行截取
doc['字段名.keyword'].value.substring(doc['字段名.keyword'].length()-5,doc['字段名.keyword'].length())
13、ES聚合默认返回10条数据,如想返回更多,则需要指定以下字段:
"size":100, #聚合返回的结果数量,默认10
"shard_size":10000 #ES查询时对各个分片的请求数量,默认(1.5*size+10)
参考:
(2)http://itindex.net/detail/60451-elasticsearch-%E8%81%9A%E5%90%88-terms
(3)https://blog.youkuaiyun.com/ubuntutouch/article/details/104141398
ElasticSearch Examples:
curl -XPOST 地址:端口/索引/_search -d '
{
"query":{
"bool":{
"must":[
{
"match":{
"log_type":0
}
},
{
"match":{
"service_ei":EI1234
}
},
{
"range":{
"@timestamp":{
"gte":"2021-10-10T00:19:41.000Z",
"lte":"2021-10-10T023:19:41.000Z"
}
}
}
]
}
},
"aggs":{
"statistics":{
"terms":{
"script":"doc['字段名.keyword'].value"+'#split#'+doc['字段名.keyword'].value+'#split#'+doc['字段名.keyword'].value.substring(doc['字段名.keyword'].length()-5,doc['字段名.keyword'].length())",
"size":100,
"shard_size":10000
}
}
},
"size":0
}' > a.txt