笔记四十一:聚合的精准度问题

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

ES笔记四十一:聚合的精准度问题

Min 聚合分析的执行流程

ES笔记四十一:聚合的精准度问题

Terms Aggregation 的返回值

  • 在Terms Aggregation的返回中有两个特殊的数值
    • doc_count_error_upper_bound:被遗漏的term分桶,包含的文档,有可能的最大值
    • sum_other_doc_count:处理返回结果bucket的terms以外,其他terms的文档总数(总数-返回的总数)
      ES 笔记四十一:聚合的精准度问题

Terms 聚合分析的执行流程

ES笔记四十一:聚合的精准度问题

Terms 不正确的案例

ES笔记四十一:聚合的精准度问题

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

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

ES 笔记四十一:聚合的精准度问题

打开 show_term_doc_count_error

ES笔记四十一:聚合的精准度问题

shard_size 设定

  • 调整 shard size 大小,降低 doc_count_error_upper_bound 来提升准确度
    • 增加整体计算量,提高了准确率,但会降低相应时间
  • Shard Size 默认大小设定
    • shard size = size * 1.5 +10
      GET kibana_sample_data_flights/_search
      {
      "size": 0,
      "aggs": {
        "weather": {
          "terms": {
            "field":"OriginWeather",
            "size":5,
            "show_term_doc_count_error":true
          }
        }
      }
      }
      GET my_flights/_search
      {
      "size": 0,
      "aggs": {
        "weather": {
          "terms": {
            "field":"OriginWeather",
            "size":1,
            "shard_size":1,
            "show_term_doc_count_error":true
          }
        }
      }
      }
      https://www.elastic.co/guide/en/elasticsea...
本作品采用《CC 协议》,转载必须注明作者和本文链接
快乐就是解决一个又一个的问题!
CrazyZard
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!