嵌套聚合Elasticsearch中的条件路径
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌套聚合Elasticsearch中的条件路径相关的知识,希望对你有一定的参考价值。
我有一个具有两个属性的嵌套字段:
{
"rating": 2
"victim": [{
"ip": "...",
"instanceId": "....""
}]
}
我希望聚合评级并获取每个文档的IP或InstanceId,而不是两者都在桶列表中。
到目前为止我得到的是:
"__rating": {
"terms": {"field": "rating"},
"aggs": {
"__hosts": {
"nested": {"path": "victim"},
"aggs": {
"ips": {"terms": {"field": "victim.ip"} } ,
"instances": {"terms": {"field": "victim.instanceId"} }
}
}
}
}
以上聚合为我提供了两个领域的桶,但我需要一个或其他。
谢谢。
答案
您需要在elasticsearch中使用源过滤。在查询顶部添加以下代码:
"_source": {
"includes": [ "victim.ip"]
}
如果你想了解更多关于源过滤的细节,你应该check this out。
另一答案
经过大量的搜索,我找到了通过无痛脚本完成它的方法:
"terms" : {
"script" : {
"source": "doc['victim.instanceId'].value == null ? doc['victim.ip'] : doc['victim.instanceId']",
"lang": "painless"
},
"missing": "N/A"
}
以上是关于嵌套聚合Elasticsearch中的条件路径的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch - 计算嵌套聚合相对于父存储桶的百分比