1. 聚合aggregations
Elasticsearch的聚合主要用于实现对数据的统计、分析,包含多种类型。
-
一个为桶,类似于group by,表示按照某种方式对数据进行分组,每一组数据在ES中称为一个桶,划分桶的方式有多种
- Date Histogram Aggregation:根据日期阶梯分组,例如给定阶梯为周,会自动每周分为一组
- Terms Aggregation:根据词条内容分组,词条内容完全匹配的为一组
- Range Aggregation:数值和日期的范围分组,指定开始和结束,然后按段分组
- Histogram Aggregation:根据数值阶梯分组,与日期类似,需要知道分组的间隔(interval)
-
一个是度量,用于metrics aggregations,分组完成以后,一般会对组中的数据进行聚合运算,如求最大值、最小值、平均值等,这种聚合叫度量
- Avg Aggregation:求平均值
- Max Aggregation:求最大值
- Min Aggregation:求最小值
- Percentiles Aggregation:求百分比
- Stats Aggregation:同时返回avg、max、min、sum、count等
- Sum Aggregation:求和
- Top hits Aggregation:求前几
- Value Count Aggregation:求总数
在ES中,需要进行聚合、排序、过滤的字段其处理方式比较特殊,因此不能被分词,必须使用keyword 或 数值类型
数据准备:
1.1 聚合为桶
-
按照汽车的颜色 color来 划分桶 ,使用TermAggregation类型,按照颜色的名称来分桶
- size: 查询条数,这里设置为0,因为我们不关心搜索到的数据,只关心聚合结果,提高效率
- aggs:声明这是一个聚合查询,是aggregations的缩写
- popular_colors:给这次聚合起一个名字,可任意指定。
- terms:聚合的类型,这里选择terms,是根据词条内容(这里是颜色)划分
- field:划分桶时依赖的字段