【问题标题】:How to hide buckets in ElasticSearch result?如何在 ElasticSearch 结果中隐藏存储桶?
【发布时间】:2017-01-09 13:16:25
【问题描述】:

在我的查询中,我将存储桶聚合为一个标量。由于我对每个存储桶(在我的情况下是数千万存储桶)不感兴趣,因此我想将它们从返回的结果中删除;即我想做类似 "size":0 的事情来隐藏所有的点击。有可能吗?

例如:

{
  "size": 0,
  "aggs": {
    "pop": {
      "terms": {
        "field": "account_number",
        "size": 0
      },
      "aggs": { 
            "average": { 
               "avg": {
                  "field": "price" 
               }
            }
         }
    },
    "sum_of_avg": {
      "sum_bucket": {
        "buckets_path": "pop>average"
      }
    }
  }
}

结果:

[...]
"aggregations": {
    "pop": {
      "doc_count_error_upper_bound": 40851,
      "sum_other_doc_count": 93441329,
      "buckets": [...] <== i don't want this
    },
    "sum_of_avg": {
      "value": 128.0768325884469
    }

【问题讨论】:

  • 这和这个问题有关:link

标签: elasticsearch


【解决方案1】:

我刚刚在相关问题中发布了answer

在这种情况下,请求应如下所示:

curl -XPOST 'http://localhost:9200/<index>/_search?filter_path=aggregations.sum_of_avg' -d '
{
  "size": 0,
  "aggs": {
    "pop": {
      "terms": {
        "field": "account_number",
        "size": 0
      },
      "aggs": { 
            "average": { 
               "avg": {
                  "field": "price" 
               }
            }
         }
    },
    "sum_of_avg": {
      "sum_bucket": {
        "buckets_path": "pop>average"
      }
    }
  }
}

PS:如果您找到其他解决方案,请在此处分享。谢谢!

【讨论】:

    【解决方案2】:

    我认为您想要的是“基数”聚合。这将返回给您不同值的数量。

    https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html

    例子:

    GET devdev/alert/_search
    {
      "size": 0,
      "aggs": {
        "agg1": {
          "cardinality": {
            "field": "price"
          }
        }
      }
    }
    

    【讨论】:

    • 并非如此,对于每个存储桶,我想应用一个聚合函数,然后将所有结果相加,就像在我的示例中一样。 :)
    猜你喜欢
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多