Elasticsearch应用(十)
1.为什么需要聚合操作
聚合可以让我们极其方便的实现对数据的统计、分析、运算,例如:
- 什么品牌的手机最受欢迎?
- 这些手机的平均价格、最高价格、最低价格?
- 这些手机每月的销售情况如何?
2.什么是聚合
聚合(aggregations)可以实现对文档数据的统计,分析,运算,在做聚合的时候往往是与文档过滤一起用的,一般不会对整个索引库进行聚合操作
3.聚合语法
4.聚合分类
- 桶聚合(Bucket): 用来对文档做分组
- TermAggregation: 按照文档字段值分组
- Date Histogram: 按照日期阶梯分组,例如一周为一组,或者一月为一组
- 度量聚合(Metric): 用以计算一些值,比如:最大值,最小值,平均值等
- Avg: 求平均值
- Max: 求最大值
- Min: 求最小值
- Stats: 同时求max,min,avg,sum等
- 管道聚合(pipeline): 其他聚合的结果为基础做聚合
- Matrix: 支持对多个字段的操作并提供一个结果矩阵
5.桶聚合
介绍
按照一定的规则,将文档分配到不同的桶中,从而达到分类的目的。ES提供的一些常见的
Bucket Aggregation
TermAggregation
需求
统计所有数据中的酒店品牌有几种,此时可以根据酒店品牌的名称做聚合
示例
默认排序规则
默认情况下,Bucket聚合会统计Bucket内的文档数量,记为_count,并且按照_count降序排序。我们可以修改结果排序方式:
注意
默认情况下,Bucket聚合是对索引库的所有文档做聚合,我们可以限定要聚合的文档范围,只要添加query条件即可
分词字段不行,必须是不能分词的字段
聚合还会返回查询的文档,所以建议设置size为0,因为聚合一般不需要返回文档,这样能提高性能
6.度量聚合
介绍
—些数学运算,可以对文档字段进行统计分析,类比MySQL中的 min(),max(),sum() 操作
States
介绍
同时求max,min,avg,sum等