带有after_key和size的ElasticSearch复合聚集

问题描述

我有问题。如果我使用设置大小的直方图复合聚合。 例如我有整数范围。聚合中的每个数字存储桶都代表1天(使用整数作为日期并不重要)。

如果我使用size并说我想得到10个存储桶。我可以可靠地使用after_key选择汇总日期吗?

因为如果我按特定的日期范围进行过滤,由于在间隔字段上创建了直方图(data_range字段类型上的日期直方图也是如此),某些文档也会出现在过滤范围之外。

我的想法是使用after_keysize的组合来设置实际开始日期。

让我担心的是documentation

after_key通常是响应中返回的最后一个存储桶的密钥,但这不能保证。始终使用返回的after_key而不是从存储桶中派生它。

如果说:我会想念一些水桶吗? after_key: 10 size: 5 after_key: 15 size: 5

也许更好的问题是,在什么情况下最后返回的存储桶与下一个after_key不匹配?

这对于Kibana正确显示时间也很有用,但是某些存储桶可能代表30年的范围,通常只查询1个月。因此,如果我能正确分页,我可以节省很多。

解决方法

据我了解,您希望具有带有复合聚合的滚动功能。 我是对的,您在正确的轨道上。

在SQL中将其视为偏移键,但您没有指定行号,而是指定了最后一行的值。

它的工作方式是在进行复合聚合时将跳过行,直到after_key中提到的行,然后返回下一组或长度size

如果新文档在这两个调用之间建立索引,则您可能会错过/超拍/等某些数据。就像您的前5个文档一样,您从1到5得到索引,然后将一些新文档编入索引,并在第一个结果之间插入/谎言。您可能会想念那些,因为您第二次打电话是在5点后要求记录。

否则你很好。

我大量使用复合聚合,因为它有助于读取常规搜索API不可能读取的聚合数据。

只需跟踪after_key,当存储桶的长度变为零时,您就可以关闭循环。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...