-
什么是聚合分析?
聚合分析,英文为Aggregation,是ES除搜索功能外提供的针对ES数据做统计分析的功能。功能丰富,提供Bucket,Metric,Pipeline等多种分析方式,可以满足大部分的分析需求。实时性高,所有的计算结果都是即时返回的。
聚合分析作为search的一部分,api如下图所示:
- Bucket:分桶类型。类似SQl中的GROUP BY 语法
- Metric:指标分析类型,如计算最大值、最小值、平均值等等
- Pipeline:管道分析类型,基于上一级的聚合分析结果进行再分析
- Matrix:矩阵分析类型 -
Metric
主要分如下两类:
- 单值分析,只输出一个分析结果
- min,max,avg,sum
- cardinality
- 多值分析
- stats,extended,stats
- percentile,percentile rank
- top hits
- Min,返回数值类的最小值
- 一次返回多个聚合结果,api及响应如下所示:
-
Bucket
- bucket,意为桶,即按照一定规则将文档分配到不同桶中,达到分类的目的。
- 按照Bucket的分桶策略,常见的Bucket聚合分析如下:
- Terms:该分桶策略最简单,直接按照 term 来分桶,如果是 text 类型,则按照分词后的结果分桶 -
Bucket + Metric 聚合分析
Bucket聚合分析允许通过添加子分析来进一步进行分析,该子分析可以是Bucket也可以是Metric。这也使得es的聚合分析能力变得异常强大
- 分桶后再分桶 - Pipeline 聚合分析
- Pipeline,针对聚合分析的结果再次进行聚合分析,而且支持支链调用。 Pipeline的分析结果会输出到原结果中,根据输出位置的不同,分为以下两类:
- Parent 结果内嵌到现有的聚合分析结果中
- Derivative (求导)
- Moving Average(移动平均值)
- Cumulative Sum(累计求和)
- Sibling 结果与现有的聚合分析同级
- Max /Min / Avg/ Sum Bucket
- Stats / Extended Stats Bucket
- Percentiles Bucket
Min Bucket,如下例,找出所有Bucket中值最小的Bucket的名称和值
Stats, 如下例,计算出所有的Bucket值的Stats(多值分析)
*Derivative *, 如下例,计算Bucket 值的导数
作用范围
ES聚合分析默认作用范围是 query 的结果集,可以通过如下的方式改变其作用范围:
- filter
- post_filter
- global