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

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

近似统计算法

三者只能满足其中两点

  • 数据量
  • 精确度
  • 实时性

Min聚合分析的执行流程

min聚合分析执行流程
  • 先通过节点将请求发送给各个分片的节点,获取最小的个数的数据
  • 再汇总所有分片的数据,返回min的数据

Terms Aggregation的返回值

  • 在Terms Aggregation的返回中有两个特殊的数值
    • doc_count_error_upper_bound:被遗漏的term分桶,包含的文档,有可能的最大值
    • sum_other_doc_count:除了返回结果bucket的terms以外,其他的terms的文档总数(总数 - 返回的总数)
返回值解析

Terms聚合分析的执行流程

terms聚合分析执行流程

在返回的top3中,数据不一定准确
如下:


top不准确示例图

在top的加和中导致不准确

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

  • Terms聚合分析不准的原因,数据分散在多个分片上,Coordinating Node无法获取数据全貌
  • 解决方案1:当数据不大时,设置Primary Shard为1,实现准确性
  • 解决方案2:在分布式数据上,设置shard_size参数,提高精确度
    • 原理:每次从Shard上额外多获取数据,提升准确率


      shard_size

      额外多获取数据,提高准确率

  • 打开show_term_doc_count_error


    show_term_doc_count_error

shard_size设定

  • 调整shard size大小,降低doc_count_error_upper_bound来提升准确度
    • 增加整体计算量,提升了准确度,但会降低相应时间
  • Shard Size默认大小设定
    • shard size = size * 1.5 + 10
    • https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html

你可能感兴趣的:(46 - ES聚合分析的原理及精准度问题)