想象一下,我有两种记录:一个桶和一个项目,其中项目包含在一个桶中,而桶可能有相对少量的项目(通常不超过4,从不超过10)。这些记录被压缩成一个(带有额外桶信息的项目)并放在Elasticsearch中。
我试图解决的任务是通过依赖于项目属性的过滤查询一次找到500个桶(最多)和所有相关项目,并且我坚持限制/抵消聚合。我如何执行这样的任务?我看到top_hits
聚合允许我控制相关项目数量的大小,但我找不到线索如何控制返回桶的大小。
更新:好吧,我非常愚蠢。 size
聚合的terms
参数为我提供了限制。有没有办法执行偏移任务?我不需要100%的精度,可能不会将这些结果分页,但无论如何我想看到这个功能。
答案 0 :(得分:3)
我认为我们不会很快看到此功能,请参阅GitHub的相关讨论。
实施分页很棘手,因为文档会计算术语 当shard_size小于字段时,聚合不准确 基数和计数desc上的排序。所以奇怪的事情可能会发生 第二页的第一项比最后一项计数更高 等第一页的元素等。
提到了一个有趣的方法,您可以在第一页上请求前20个结果,然后在第二页上请求运行相同的聚合但排除您在上一页中已经看到的那20个术语,依此类推。但是这不允许你“随机”访问任意页面,你必须按顺序浏览页面。
...如果您只有有限数量的唯一值 匹配文档的数量,在客户端进行分页将是 更高效。另一方面,在高基数领域,你的 基于排除的第一种方法可能会更好。