所以,我们试图按颜色汇总所有文档,
对于每种颜色,找到最大时间戳为max_timestamp.
然后,仅过滤max_timestamp低于现在-5m的桶.
这里的想法是检查过去5分钟内是否有没有报告文件的颜色.
这是我们现在得到的:
{
"size": 0,
"aggs": {
"colors_aggs": {
"terms": {
"field": "color",
"size": 10
},
"aggs": {
"max_timestamp": {
"max": {
"field": "timestamp"
}
},
"aggs": {
"filter": {
"range": {
"timestamp": {
"lt": "now-5m"
}
}
}
}
}
}
}
}
它似乎忽略了第三个聚合.显示时间戳大于现在-5米的桶.
有帮助吗?
最佳答案 也许您可以使用脚本在最终聚合中过滤掉不需要的记录(在您的案例记录中,时间戳>“现在 – 5m”),然后您的最终聚合(最终输出)将仅基于所需的记录.
查询应该是这样的:
{
"size": 0,
"aggs": {
"colors_aggs": {
"terms": {
"field": "color",
"size": 10
},
"aggs": {
"maximals": {
"max": {
"field": "timestamp":
}
},
"max_bucket_filter": {
"bucket_selector": {
"buckets_path": {
"maxs": "max_timestamp"
},
"script": {
"lang": "expression",
"script": "maxs < [CurrentUnixTime x 1000]"
}
}
}
}
}
}
}
请注意,上面的脚本不能接受关键字now-5m,因此每次执行查询时都必须设置当前的unix时间.