聚合分析 aggregation

es 在搜索功能之外,提供的针对数据统计分析的功能

  1. 功能丰富,提供bucket metric pipeline 等多种分析方式
  2. 实时性高,所有结果都是即时返回,而hadoop等大数据系统是t+1级别

聚合分析种类

  1. bucket 分桶类型 类似sql中的group by 语法
  2. metric 指标分析类型 如计算最大值 最小值 平均值等
  3. pipeline 管道分析类型,基于上一级的聚合分析结果进行再分析
  4. matrix 矩阵分析类型

metric 聚合分析

  1. 单值分析

    1. min max avg sum
    2. cardinality
  2. 多值分析

    1. stats extends stats
    2. percentile percentile rank
    3. top hits

bucket 聚合分析

将文档归类为不同的bucket中

  1. terms
  2. range
  3. date range
  4. histogram

    1. 直方图 以固定间隔策略来分割数据
  5. date histogram

pipeline

  1. pipeline 的分析结果会输出到原结果中 根据输出位置不同 分为两类

    1. parent 结果内嵌到现有的聚合分析结果中

      1. derivative
      2. moving average
      3. cumulative sum
    2. sibling 结果与现有聚合分析结果同级

      1. max min avg sum bucket
      2. stats extended stats bucket
      3. percentile bucket

作用范围

  1. es默认的作用范围是query结果集,也可以设置其他范围

    1. filter 为了聚合分析设定过滤条件,不更改整体query语句的情况下调整作用范围
    2. post_filter 作用域文档过滤 但在聚合分析后生效
    3. global 无视query过滤条件 基于全部文档进行分析

排序

可以使用自带的关键数据进行排序

  1. _count文档数
  2. _key按照key值排序

原理与精准度问题

原因 数据分散在多个shard上

  1. 设置shard为1 消除苏韩剧分散问题
  2. 设置shard size 即每次从shard上额外获得文档

terms聚合返回结果中有如下两个统计值

  1. doc_count_error_upper_bound 被遗漏的term的可能的最大值
  2. sum_other_doc_count返回结果bucket的term外其他term的文档总数

shard size 默认大小如下 size*1.5 + 10
通过调整shard size的大小降低 doc_count_error_upper_bound 来提升准确度 大了整体计算量 降低了响应时间


Fox_Valentin
1 声望1 粉丝