16.数据聚合
聚合 aggregations 实现对文档的分析、统计和运算。
常见聚合分为三类:
1.Bucket桶聚合:对文档做分组。这里的字段是不分词的,可以是keyword、日期、数值和布尔等。不能是text
TermAggregation: 按照文档字段值分组
Date Histogram: 按照日期阶梯分组,例如一周为一组、一月为一组、一季度为一组、一年为一组。
2.Metric度量聚合:用以计算一些值,比如:最大值、最小值、平均值等。
Avg: 求平均值
Max: 求最大值
Min: 求最小值
Stats: 同时求max、min、avg、sum等。
3.管道(Pipeline)聚合:其他聚合的结果为基础做聚合。
案例:
1.第一步酒店数据按照品牌分组——bucket桶聚合
2.第二步计算不同品牌酒店的平均价格——Metric度量聚合
3.第三步对平均价格进行排序或者获取最大值和最小值——Pipeline管道聚合
场景:统计所有数据中酒店品牌有几种,可以根据酒店品牌的名称做聚合。
酒店品牌brand是keyword类型
bucket聚合使用term类型。
聚合必须的三要素:
1.聚合名称brandAgg
2.聚合类型terms
3.聚合字段brand
默认情况下,bucket聚合会统计bucket内的文档数量,记为_count,并且按照_count降序排序。
可以修改结果的排序方式:
自定义排序规则
默认情况下,bucket聚合会对索引库的所有文档做聚合。可以限定要聚合的文档范围,添加query条件。
案例:获取每个品牌的用户评分的min,max,avg等值。
利用stats聚合。
再按照metric聚合中的平均值降序排序