【问题标题】:How can I filter doc_count value which is a result of a nested aggregation如何过滤作为嵌套聚合结果的 doc_count 值
【发布时间】:2019-03-15 00:25:44
【问题描述】:

如何过滤作为嵌套聚合结果的 doc_count 值? 这是我的查询:

    "aggs": {
            "CDIDs": {
              "terms": {
                "field": "CDID.keyword",
                "size": 1000
              },
              "aggs": {
                "my_filter": {
                  "filter": {
                    "range": {
                      "transactionDate": {
                        "gte": "now-1M/M"
                      }
                    }
                  }
                },
                "in_active": {
                  "bucket_selector": {
                    "buckets_path": {
                      "doc_count": "_count"
                    },
                    "script": "params.doc_count > 4"
                  }
                }
              }
            }
          }

查询结果如下:

      {
          "aggregations" : {
            "CDIDs" : {
              "doc_count_error_upper_bound" : 0,
              "sum_other_doc_count" : 2386,
              "buckets" : [
                {
                  "key" : "1234567",
                  "doc_count" : 5,
                  "my_filter" : {
                    "doc_count" : 4
                  }
                },
                {
                  "key" : "12345",
                  "doc_count" : 5,
                  "my_filter" : {
                    "doc_count" : 5
                  }
                }
              ]
            }
          }
        }

我正在尝试在这里过滤第二个 doc_count 值。假设我想要大于 4 的文档,因此结果应该是在 doc_count = 5 的存储桶中只有一个聚合结果。谁能帮助我如何执行此过滤器?如果需要任何其他信息,请告诉我。

【问题讨论】:

    标签: elasticsearch elasticsearch-aggregation


    【解决方案1】:

    仔细查看bucket_selector 聚合。您只需在 buckets_path 部分指定聚合名称,即 "doc_count":"my_filter>_count"

    管道聚合(buckets_path) 有自己的语法,其中> 充当分隔符。有关这方面的更多信息,请参阅此LINK

    聚合查询

    POST <your_index_name>/_search
    {  
       "size":0,
       "aggs":{  
          "CDIDs":{  
             "terms":{  
                "field":"CDID.keyword",
                "size":1000
             },
             "aggs":{  
                "my_filter":{  
                   "filter":{  
                      "range":{  
                         "transactionDate":{  
                            "gte":"now-1M/M"
                         }
                      }
                   }
                },
                "in_active":{  
                   "bucket_selector":{  
                      "buckets_path":{  
                         "doc_count":"my_filter>_count"
                      },
                      "script":"params.doc_count > 4"
                   }
                }
             }
          }
       }
    }
    

    希望对你有帮助!

    【讨论】:

    • 尼山特。欢迎来到软!!如果您认为这已经解决了问题,请随时接受。您接受的方式是,单击答案旁边的灰色箭头标记。你可以参考这个链接作为参考math.meta.stackexchange.com/a/3287 这样使用 sof 的用户就会知道这个查询已经解决了,它也可以帮助新用户理解这个问题有一个有效的解决方案。希望对您有所帮助!
    • 谢谢卡马尔。有效。我实际上认为我应该在发布后使​​用 my_filter._count (这只是侥幸没有看到任何参考)。您的解决方案帮助我知道为什么我应该这样做以及参考链接......非常感谢......干杯
    猜你喜欢
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 2021-07-04
    • 2017-04-15
    • 2018-01-30
    相关资源
    最近更新 更多