分布式系统的近似统计算法
三者只能满足其中两点
- 数据量
- 精确度
- 实时性
Min聚合分析的执行流程
- 先通过节点将请求发送给各个分片的节点,获取最小的个数的数据
- 再汇总所有分片的数据,返回min的数据
Terms Aggregation的返回值
- 在Terms Aggregation的返回中有两个特殊的数值
- doc_count_error_upper_bound:被遗漏的term分桶,包含的文档,有可能的最大值
- sum_other_doc_count:除了返回结果bucket的terms以外,其他的terms的文档总数(总数 - 返回的总数)
Terms聚合分析的执行流程
在返回的top3中,数据不一定准确
如下:
在top的加和中导致不准确
解决Terms不准的问题:提升shard_size的参数
- Terms聚合分析不准的原因,数据分散在多个分片上,Coordinating Node无法获取数据全貌
- 解决方案1:当数据不大时,设置Primary Shard为1,实现准确性
- 解决方案2:在分布式数据上,设置shard_size参数,提高精确度
-
原理:每次从Shard上额外多获取数据,提升准确率
额外多获取数据,提高准确率
-
-
打开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