我有一个带有~3m文档的ES 2索引,我正在一个相对高基数的字段(约1m的唯一值)上进行重要的术语聚合,具有经典的幂律频率分布(这些唯一值中的一些)是非常频繁的,其他大多数形成了低数量的长尾。)
这种聚合非常昂贵且速度慢,因此我开始研究ES 2的新sampler aggregation功能。它作为父聚合,将使子聚合对数据样本起作用。但是,我想更好地理解它是如何工作的,因为关于这个主题的文档很少。
我使用shard_size
参数进行200的采样器聚合,我得到的结果与非采样重要术语聚合有很大不同。此外,有时采样聚合不会返回任何结果。所以我试图了解采样过程中的哪一点。
如果x
是重要术语聚合中的一个存储区,而y
是过滤后的语料库的大小,则其显着性度量由类似significance of x in subset y = [ (count x in y / size y) / (x in corpus / size corpus) ] * [ (count x in y / size y) - (x in corpus / size corpus) ]
的值给出JLH分数的定义。
在过滤之前,采样是立即应用于语料库还是应用于过滤后的集合y
?我试图理解为什么有时我的采样聚合没有返回结果,当我知道应该有一些。我还注意到,如果我增加采样器聚合的shard_size
参数,我最终会得到一些结果。
答案 0 :(得分:0)
对于迟到感到抱歉 - 只是遇到了这个问题:)
significant_terms agg默认依赖于在结果中至少有3个术语实例(参见min_doc_count),然后才能确定它可能有用。 如果您的样本量太小,您可能无法满足所选术语的此阈值。如果你有太多的分片,这会让生活变得更加困难,因为它会在网络上传播你的问题的答案。 如果您的查询模糊,小样本量也很好 - 它专注于高质量,高信号的结果。可以在此处清楚地看到这些设置的效果:https://www.youtube.com/watch?v=azP15yvbOBA