Eli*_*Eli 5 timestamp filter aggregation elasticsearch
因此,我们尝试按颜色汇总所有文档,其中每种颜色的最大时间戳记为max_timestamp。然后,仅过滤max_timestamp低于的存储桶now-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"
}
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
似乎忽略了第三种聚合。时间戳大于now-5m显示的存储桶。
有什么帮助吗?
也许您可以使用脚本过滤掉timestamp > "now - 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]"
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,上面的脚本不能接受关键字now-5m,因此每次执行查询时都必须设置当前的 unix 时间。
| 归档时间: |
|
| 查看次数: |
668 次 |
| 最近记录: |