聚合分析
聚合分析,英文为Aggregation,是es 除搜索功能外提供的针对es 数据做统计分析的功能
- 功能丰富,提供Bucket、Metric、Pipeline等多种分析方式,可以满足大部分的分析需求
实时性高,所有的计算结果都是即时返回的,而hadoop 等大数据系统一般都是
T+1级别的
为了便于理解,es将聚合分析主要分为如下4类
Bucket,分桶类型,类似SQL中的GROUP BY语法
Metric,指标分析类型,如计算最大值、最小值、平均值等等
Pipeline,管道分析类型,基于上一级的聚合分析结果进行再分析
Matrix,短阵分析类型
Metric
主要分如下两类:
单值分析,只输出一个分析结果
-min,max,avg,sum
-cardinality
多值分析,输出多个分析结果
-stats,extended stats
-percentile, percentile rank
-top hits
Bucket
Pipeline
Pipeline 的分析结果会输出到原结果中,根据输出位置的不同,分为以下两类Parent 结果内嵌到现有的聚合分析结果中
- Derivative
- Moving Average
- Cumulative Sum
Sibling 结果与现有聚合分析结果同级
- Max/Min/Avg/Sum Bucket
- Stats/Extended Stats Bucket
- Percentiles Bucket
filter
1.在倒排索引中查找搜索串,获取document list
2.为每个在倒排索引中搜索到的结果构建一个bitset, [0.0,1],匹配就是1,不匹配就是0
3.遍历每个过滤条件对应的bitset,优先从最稀疏的开始搜索..查找满足所有条件的document
4.caching bitset,跟踪guery,在最近256e个query中超过一定次数的过滤条件,缓存其bitset。
对于小segment (filter针对小segment获取到的结果,可以不缓存,segment记录数<1000,或者segment大小<index总大小3%,小得segment会在后台自动合并,很快消失),不缓存bitset。
5.fileter在query之前执行,先尽量过滤掉尽可能多的数据
6.如果document有新增或修改,那么cached bitset会被自动更新
7.以后只要是有相尚的filter条件的,会直接来使用这个过滤条件对应的cached bitset