聚合(aggregations)可以实现对文档数据的统计、分析、运算。聚合常见的有三类:
1、
桶(Bucket)聚合
:用来对文档做分组
•
TermAggregation
:按照文档字段值分组
•
Date Histogram
:按照日期阶梯分组,例如一周为一组,或者一月为一组
2、
度量(Metric)聚合
:用以计算一些值,比如:最大值、最小值、平均值等
•
Avg:求平均值
•
Max:求最大值
•
Min:求最小值
•
Stats
:同时求
max
、
min
、
avg
、
sum
等
3、管道(
pipeline
)聚合:其它聚合的结果为基础做聚合
其中,我们以学习桶(Bucket)聚合和度量(Metric)聚合为主。需要注意的是:参与聚合的字段类型必须是:keyword、数值、日期、布尔
示例一(桶Bucket聚合功能):统计所有数据中的酒店品牌有几种,此时可以根据酒店品牌的名称做聚合,并且要限定聚会范围(注意aggs与query同级),价格小于200的酒店,自定义排序,按照每组查询到的总数进行升序排序。(聚合可配置的有:size:指定聚合结果的数量,order:指定聚合结果的排序方式,field:指定聚合字段)
GET /hotel/_search
{
"query": {
"range": {
"price": {
"lte": 200
}
}
},
"size": 0,
"aggs": {
"brandAgg": {
"terms": {
"field": "brand",
"size": 20,
"order": {
"_count": "asc"
}
}
}
}
}
示例二(度量metric嵌套聚合功能):统计所有数据的酒店品牌有多少种,并且算出每种酒店评分的最小值、最大值、平均值、总值,最后以每个酒店的平均评分作降序排序(里面的aggs就是嵌套了一个聚合,stats就是求上面聚合得到的结果进行求最小值、最大值、平均值、总值,order里的scoreAgg.avg就是设置酒店平均分的排序方式)
GET /hotel/_search
{
"size": 0,
"aggs": {
"brandAgg": {
"terms": {
"field": "brand",
"size": 20,
"order": {
"scoreAgg.avg": "desc"
}
},
"aggs": {
"scoreAgg": {
"stats": {
"field": "score"
}
}
}
}
}
}
至此,ElasticSearch的聚合介绍和实例展示就到此结束啦~