嵌套聚合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聚合的嵌套桶如何排序

七.全文检索ElasticSearch经典入门-聚合查询

Elasticsearch - 计算嵌套聚合相对于父存储桶的百分比

elasticsearch的嵌套聚合,下钻分析,聚合分析

Elasticsearch学习之嵌套聚合,下钻分析,聚合分析

如何在elasticsearch的嵌套聚合中存储空字段和非空字段?