我有个问题。如果我使用直方图复合聚合设置大小。例如,我有整数范围。聚合中的每个数字桶表示1天(使用整数表示日期并不重要)。
如果我使用 size
我想得到10个桶的结果。我能可靠地使用 after_key
选择我结婚的日期?
因为如果我按特定的日期范围过滤,我也会得到超出过滤范围的bucket,因为有些文档会在那里,因为直方图是在interval字段上创建的(对于interval字段上的日期直方图也是如此) data_range
字段类型)。
我的想法是用 after_key
设置实际开始日期和 size
选择我想要多少天的结果。
我担心的是文件:
这个 after_key
通常是响应中返回的最后一个bucket的键,但这不能保证。始终使用返回的 after_key
而不是把它从桶里挖出来。
如果我说:
after_key: 10 size: 5 after_key: 15 size: 5
或者更好的问题是,当上次返回的bucket与\u key之后的next不匹配时,会出现什么情况?
这对于kibana正确显示时间也很有用,但是有些桶可能代表30年的范围,通常只查询1个月。因此,如果我能正确分页,我可以节省很多。
1条答案
按热度按时间kzipqqlq1#
据我所知,你想有复合聚合滚动功能。我是对的,你在正确的轨道上。
可以将它看作sql中的offset键,但不是提供行号,而是指定最后一行的值。
它的工作方式是,在进行复合聚合时,它将跳过行,直到
after_key
返回下一组或下一个长度size
如果在这两个调用之间索引了新文档,那么您可能会丢失/漏掉/etc一些数据。就像您的前5个文档一样,从1到5,然后索引一些新文档,并插入/位于这些第一个结果之间。你可以错过这些,因为在你第二次打电话,你是要求记录后5。否则你就没事了。
我使用复合聚合很多,因为它可以帮助读取聚合数据,这在普通的搜索api中是不可能的。
只需跟踪
after_key
当桶的长度变为零时,你可以关闭循环。