【问题标题】:Conditional path in nested aggregation Elasticsearch嵌套聚合 Elasticsearch 中的条件路径
【发布时间】:2018-08-07 11:07:21
【问题描述】:

我有一个包含两个属性的嵌套字段:

{
    "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 path conditional


    【解决方案1】:

    您需要在 elasticsearch 中使用源过滤。在查询的顶部添加这段代码:

    "_source": {
      "includes": [ "victim.ip"]
    }
    

    如果您想了解更多关于源过滤的详细信息,请check this out

    【讨论】:

      【解决方案2】:

      经过大量搜索,我找到了通过无痛脚本进行操作的方法:

      "terms" : {
          "script" : {
              "source": "doc['victim.instanceId'].value == null ? doc['victim.ip'] : doc['victim.instanceId']",
              "lang": "painless"
          },
          "missing": "N/A"
      }
      

      【讨论】:

        猜你喜欢
        • 2021-12-14
        • 2015-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-01
        • 2018-01-30
        相关资源
        最近更新 更多