我使用的是elasticsearch 2.4,并希望获得数据中各种实体的不同计数。我玩了很多查询,包括两种计算不同计数的方法。一种是通过基数聚合而另一种是通过术语聚合然后通过计算桶大小来获得不同的计数。通过前一种方法,我发现计数错误且不准确,但速度更快,相对简单。我的数据量巨大且会随着时间的推移而增加,因此我不知道基数聚合将如何执行,是否会变得更准确或更准确。希望从之前有过这个问题的人那里得到一些建议,以及他们选择哪种方法。
答案 0 :(得分:0)
基数聚合需要precision_threshold
的附加参数precision_threshold选项允许交换内存以保证准确性, 并定义一个唯一的计数,低于该计数预计计数将接近 要准确。高于此值,计数可能会变得更加模糊。 支持的最大值为40000,阈值高于此数字 将具有与40000的阈值相同的效果。默认值 是3000。
简而言之,基数可以为您提供最多40000基数的精确计数,之后它会给出近似计数。 precision_threshold越高,内存成本越高,准确度越高。对于非常高的值,它只能为您提供近似计数。
答案 1 :(得分:0)
添加到Rahul在以下答案中所说的内容。基数将 给你一个近似的计数是,但是如果你设置精度 最高阈值为40000,它将为您提供 直到40000的准确结果。 更重要的是,它永远不会超越 1%,甚至一千万个文档。
请参见下面的屏幕截图
来源:https://www.elastic.co/guide/en/elasticsearch/reference/2.4/search-aggregations-metrics-cardinality-aggregation.html
如果我们从用户的角度来看它。如果用户得到 1000万个documnet或实际上一百万个 下降1%,不会有太大变化,并且会消失 不被注意。当用户想要查看实际数据时,他将执行 仍然进行搜索,将返回准确的结果。