弹性搜索每小时获取一条记录



我只想在一个日期范围内每小时获取一条记录。例如,如果我想获取天数之间的数据(28-08-2018 - 15-09-2018(,则有近10000条记录,但我想过滤结果以每小时仅显示一条记录,所以我使用date_histogram聚合,每小时只能看到一条记录

查询:

{ 
"size" : 0,
"query": {
"bool": {
"must": [
{
"range": {
"createdtime": {
"gte": "1535201500000",
"lte": "1536756706000",
"boost": 2.0
}
}
},
{
"match": {
"gen": 1
}
},
{
"match": {
"Mid": 350404
}
}
]
}
},
"aggregations" : {
"runtime" : {
"date_histogram" : {
"field" : "createdtime",
"interval" : "1H",
"min_doc_count": 1
},"aggs": {
"tops": {
"top_hits": {
"size": 1
}
}
}
}
}      
}

这里的问题是我想使用分页来显示这些结果,因为我知道没有办法使用 size 并且从现在的聚合查询开始,我想知道是否有任何其他方法可以在一小时内只获取一条记录

如果您按小时对文档进行分组,那么对于每个间隔,您已经知道将有多少结果。

对于您提供的时间间隔 (28-08-2018 - 15-09-2018(,中间有 432 小时,因此您知道会有 432 个结果。现在,假设您想每页显示 8 个结果,这意味着将有 54 个页面,其中每个页面将包含 8 小时窗口的结果:

第一页是 28-08-2018 00:00:00(1535410800000( - 28-08-201808:00:00(1535410800000 + 8 * 3600000( 因此,对第一页的聚合请求应如下所示:

...
"range": {
"createdtime": {
"gte": "1535410800000",
"lt": "1535439600000",
"boost": 2.0
}
}
...

第 2 页为 28-08-2018 08:00:00 (1535410800000 + 8 * 3600000( - 28-08-2018 16:00:00(1535410800000 + 16 * 3600000(

...
"range": {
"createdtime": {
"gte": "1535439600000",
"lt": "1535468400000",
"boost": 2.0
}
}
...

依此类推,您只需根据创建时间缩小聚合范围,这将返回特定页面的结果。

最新更新