【问题标题】:Count of all the results from terms aggregation bucket术语聚合桶中所有结果的计数
【发布时间】:2017-10-04 18:06:27
【问题描述】:
GET /test*/_search
{
  "size": 0,
  "query": {
    "match_all": {}
  },
  "aggs": {
    "test": {
      "terms": {
        "field": "name.keyword",
        "min_doc_count": 10
      }
    }
  }
}

上述查询将返回所有出现超过 10 次的唯一名称。 我希望查询返回出现次数超过 10 次的唯一名称的计数。

我找不到找出计数的方法。有人可以帮忙吗?

谢谢。

【问题讨论】:

  • 该查询应返回这些名称的 doc_count。一个名称是否可以在文档中多次出现,您是否正在寻找一个可以解释这一点的总和?
  • 示例:ElasticSearch 存储预订详情。一个人可以多次预订。我可能有兴趣了解进行超过 10 次预订的人数。
  • 你试过我的答案了吗?

标签: elasticsearch elasticsearch-dsl


【解决方案1】:

这样就可以了。

“count”将为您提供出现次数超过 10 次的唯一名称的计数。

GET /test*/_search?filter_path=aggregations.count
{
  "size": 0,
  "query": {
    "match_all": {}
  },
  "aggs": {
    "test": {
      "terms": {
        "field": "name.keyword",
        "min_doc_count": 10
      },
      "aggs": {
        "test2": {
          "value_count": {
            "field": "name.keyword"
          }
        },
        "test3":{
          "bucket_script": {
            "buckets_path": "test2",
            "script": "return 1"
          }
        }
      }
    },
    "count":{
      "sum_bucket": {
        "buckets_path": "test>test3"
      }
    }
  }
}

如果这能解决您的问题,请告诉我。

【讨论】:

  • 是的,我确实尝试了您的答案并且它有效。谢谢。这似乎是一个黑客。我正在寻找是否有更简单的方法。
  • 我不确定是否有其他方法可以做到这一点。找了很多elasticSearch资源
  • 是的,这确实是一个 hack。您使用的是什么后端? Java、nodejs 之类的?
  • 我想在 kibana 中使用这些查询。我还想排除存储桶,因为可能不需要该信息并且需要滚动。
  • 我已经更新了我的答案。这将删除所有不需要的东西。
猜你喜欢
  • 1970-01-01
  • 2018-08-23
  • 2021-08-22
  • 2021-06-06
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多