为什么我得到的桶数总是等于聚合方面的指定大小?

Why am I getting number of buckets always equal to the specified size in terms aggregations?

我是弹性搜索的新手,我正在使用术语聚合来仅获取基于索引字段的唯一文档。我在查询中指定了唯一文档的最大大小,为什么存储桶计数总是等于大小?

{
  "aggs": {
    "name": {
      "terms": {
        "field": "fieldname",
        "size": 10000
      }
    }
  }
}

为什么我得到 10000 个桶,而唯一文档可能少于这个数量?

10000 是查询中 returned 文档数量的上限。您的索引将拥有超过 10000 条记录。要获得实际计数使用值 count api

GET index/_count

OR

{
  "size": 0, 
  "aggs": {
    "total_doc_count": {
      "value_count": {
        "field": "fieldname"
      }
    }
  }
}

要在一个查询中获取超过 10000 个文档,您必须使用 scroll api

POST /index-name/_search?scroll=1m --> scroll context
{
    "size": 10000,  --> will return docs in chunk of 10,000
    "query": {
        "match_all": {}
    }
}

POST /_search/scroll 
{
    "scroll" : "1m", 
    "scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ==" --> you will get from previous request
}

如果只有 100 个文档,术语聚合将 return 只有 100 而不是 10000