Elasticsearch-聚合分析的原理及精准度问题

目录

分布式系统的近似统计算法

Min聚合分析的执行流程

Terms Aggregation

Term 聚合的分析流程

Terms不正确的案例

解决Terms不准的问题: 提升shard_size的参数

打开show_term_doc_count_error


分布式系统的近似统计算法

  • 数据量很大且精准度要求高:Hadoop离线计算

  • 精确度要求高且实时性要求高且有限数据计算时:ES可以满足要求

  • 数据量很大且实时性要求高采用近似计算牺牲精准度

Min聚合分析的执行流程

  •  对索引做一个Min聚合,而且数据是分布在三个分片上的
  • Coordinating Nodes收到一个Min聚合的请求时,同时到三个分片上找到三个分片上的最小值
  • 在Coordinating Nodes对三个返回的结果求一个最小值

Terms Aggregation

  • 在Terms Aggregation的返回中有两个特殊的数值
    • doc_count_error_upper_bound : 被遗漏的term分桶,包含的文档,有可能的最大值

    • sum_other_doc_count : 除了返回结果bucket的terms以外,其他terms的文档总数(总数--返回的总数)

Term 聚合的分析流程

  • 对索引做一个Terms聚合,而且数据是分布在三个分片上的
  • Coordinating Nodes收到一个Terms聚合的请求时,同时到三个分片上找到三个分片上的三个文档
  • 在Coordinating Nodes对三个分片上的三个文档取top3
  • 以上分析看似合理,其实结果可能不正确

Terms不正确的案例

  •  Coordinating Nodes对左右两边返回的结果做一个汇总,然后进行排序
  • 最终的返回结果是: A:12--> B:6-->C:4
  • D真实的总数应该是6,被错误的排除掉
  • doc_count_error_upper_bound : 被遗漏的term分桶,包含的文档,有可能的最大值

  • sum_other_doc_count : 总的文档数(29)-返回的文档数(22)=7

解决Terms不准的问题: 提升shard_size的参数

  • Terms聚合分析不准的原因,数据分散在多个分片上,Coordinating Node无法获取数据全貌

  • 解决方案1:当数据量不大时,设置Primary shard为1;实现准确性

  • 方案2:在分布式数据上,设置shard_size参数,提高准确度.

    • 原理:每次从shard上额外获取数据,提升准确率

    • 调整shard size的大小,降低doc_count_error_upper_bound 来提升准确度

      • 增加整体计算量,提高了准确度,但会降低相应时间

    • Shard Size默认大小设定

      • shard size = size * 1.5 + 10

  • 通过增加shard_size的大小可以保证聚合结果的正确性 

打开show_term_doc_count_error

  •  发送Term Aggs的时候通过增加参数(show_term_doc_count_error设为true)帮助了解聚合分析的结果是不是精确.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值