ElasticSearch只统计一个文档有多少用户?

pu82cl6c  于 2023-03-22  发布在  ElasticSearch
关注(0)|答案(2)|浏览(110)

如何在ElasticSearch中使用aggregations来统计数据库中只有一个文档的用户数量?

{
    "size" : 0,
    "aggs" : {
        "users_with_single_doc" : {
            "rare_terms": {
                "field": "uid",
                "max_doc_count" : 1
            }
        }
    }
}

上面的查询只能列出所有_doc_count为1的bucket,但我想统计有多少个bucket的_doc_count为1。

8qgya5xd

8qgya5xd1#

The rare_terms aggregation是Elasticsearch中使用的一种值源聚合,用于识别一组文档中不常见或罕见的术语。它类似于术语聚合,但不是按计数对术语进行排序,它按照稀有性的升序对它们进行排序。这意味着在数据集中不常出现的稀有术语将被赋予更高的优先级,并首先返回。项聚集是比按计数排序更准确的识别稀有项的方式,按计数排序可能具有无限的误差。
您可以在您的案例中使用术语aggregation和bucket_selector aggregation。下面是一个示例:

GET test/_search
{
  "size": 0,
  "aggs": {
    "values": {
      "terms": {
        "field": "tags.keyword",
        "size": 10000
      },
      "aggs": {
        "final_filter": {
          "bucket_selector": {
            "buckets_path": {
              "values": "_count"
            },
            "script": "params.values == 1"
          }
        }
      }
    }
  }
}
p3rjfoxz

p3rjfoxz2#

如果我正确理解了你在寻找什么,要计算桶的数量,使用stats bucket aggregation怎么样?
示例:

{
    "size": 0,
    "aggs": {
        "users_with_single_doc": {
            "rare_terms": {
                "field": "uid",
                "max_doc_count": 1
            }
        },
        "stats_users_with_single_doc": {
            "stats_bucket": {
                "buckets_path": "users_with_single_doc > _count"
            }
        }
    }
}

相关问题