嵌套聚合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中的条件路径的主要内容,如果未能解决你的问题,请参考以下文章