我有以下形式的文件存储在elasticsearch中:
{ "mid" : "", "fun" : "", "user" : "", "jobid" : "", ...}
我想根据前3个字段聚合这些文档,并且通过此查询成功完成了这些:
{
"size" : 0,
"aggs": {
"username": {
"terms": {
"field": "user"
},
"aggs": {
"minion_id": {
"terms": {
"field": "mid"
},
"aggs": {
"network": {
"filter": {
"regexp": {
"fun": "(ip|network).*"
}
}
},
"service": {
"filter": {
"regexp": {
"fun": "service.*"
}
}
}
}
}
}
}
}
}
由于我想根据某些模式对fun
字段中的值进行分组,因此我在此字段中使用了正则表达式(与其精确值的其他字段不同)。
现在我的问题是:如何根据jobid
字段中的不同值来计算文档数量?
以这些文件为例:
{ "mid" : "a", "fun" : "ip.a", "user" : "user1", "jobid" : "1", ...}
{ "mid" : "a", "fun" : "network.a", "user" : "user1", "jobid" : "1", ...}
正如您所看到的那样,它们被放在同一个组中,因为fun
字段的模式是相同的。使用我的查询会将2
作为结果,但我想返回1
,因为它们的jobid
字段具有相同的值。
感谢。