ElasticSearch | 聚合分析的原理 & 精准度的问题

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

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

min 聚合分析的执行流程

  • 这个分析的结果是准确的;


    min 聚合分析的执行流程.png

Terms Aggregation | 返回参数中的 2 个特殊值

  • doc_count_error_upper_bound:被遗漏的分桶中可能包含的文档数的最大数;
  • sum_other_doc_count:除了返回结果中的 Bucket 中的文档以外,其他文档的数量(索引中总文档数 - 桶中返回的文档数);

Terms Aggregation | 执行流程

  • 返回分桶中文档数最大的 3 个分桶;
  • 结果不一定准确;


    Terms 聚合分析执行流程.png

Terms 聚合不正确的案例

Terms 聚合不正确的案例.png
  • 文档数最多的 3 个桶应该是 A,B,D,但是 Terms 聚合的结果是 A,B,C;
doc_count_error_upper_bound | 举例分析
  • 左边的分片中,选出来的文档数最大的 3 个桶中的文档数分别是:6, 4, 4,那么遗漏的文档数最大可能就是 4;
  • 右边的分片中,选出来的文档数最大的 3 个桶中的文档数分别是:6, 3, 2,那么遗漏的文档数最大可能就是 2(图中有错);
sum_other_doc_count | 举例分析
  • 索引中全部文档数 - 返回的 3 个桶中的文档总数,29 - 22 = 7;

解决 Terms 聚合不准的问题 | 提升 shard_size 的参数

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

参数 | shard_size | 设定

通过调大 shard_size 的大小,使得 doc_count_error_upper_bound 的值降低,从而提升准确度,其原理是:增加整体计算量,提高精准度的同时会降低响应时间;

shard_size 默认大小
  • shard_size = size * 1.5 + 10

你可能感兴趣的:(ElasticSearch | 聚合分析的原理 & 精准度的问题)