我需要通过一个条件来过滤聚合结果,该条件表明至少有一个文档分组必须包含具有特定内容的字段。 我的数据是一种发生在不同进程中的事件痕迹,一个独特的进程有很多痕迹。
我的数据示例:
proc_id event timestamp
1 ON 1000
1 EV1 1001
2 ON 1002
1 OFF 1003
3 ON 1004
2 EV2 1005
3 EV1 1006
3 EV_END 1007
2 EV_END 1008
例如,我需要按proc_id分组,只需要至少包含一个EV_END事件的proc_id。 仅使用EV_END跟踪不是解决方案,因为我需要处理事物(如事件的次数和次数),以及之后的proc_id的所有痕迹。
我在版本2.x中看到有bucket_selectors和脚本,但我没有得到这个想法。
我想做的伪查询:
curl -XPOST 'localhost:9200/proc/_search?pretty' -d '
{
"query": { "match_all": {} },
"aggs": {
"group_by_proc_id": {
"terms": {
"field": "proc_id",
**ONLY if proc has at least one trace with event == 'EV_END'**
}
}
}
}'
答案 0 :(得分:0)
我认为您可以使用filter aggregation来获取存在EV_END事件的 proc_ids 。
{
"query": {
"match_all": {}
},
"size": 0,
"aggs": {
"EV_END": {
"filter": {
"term": {
"event": "EV_END"
}
},
"aggs": {
"proc_group": {
"terms": {
"field": "proc_id",
"size": 10
}
}
}
}
}
}