You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按doc_count对Elasticsearch的composite聚合桶排序?

解决方案

方案一:改用Terms聚合(无需分页时推荐)

如果不需要对聚合结果进行分页操作,直接使用terms聚合就能轻松实现按doc_count排序,这是最直接的方案:

GET /civile/_search
{
  "size": 0,
  "query": {
    "match": {
      "distretto": "MI"
    }
  },
  "aggs": {
    "our_buckets": {
      "terms": {
        "field": "codiceoggetto.keyword",
        "size": 1000,
        "order": {
          "_count": "desc"  // 按文档数量降序排序,升序替换为"asc"
        }
      }
    }
  }
}

方案二:保留Composite聚合(需分页时的变通方法)

如果必须使用composite聚合(比如数据量极大,需要分页获取所有聚合桶),由于composite本身仅支持基于定义的sources字段排序,无法直接按doc_count全局排序,可通过嵌套bucket_sort聚合对当前页的桶进行排序:

GET /civile/_search
{
  "size": 0,
  "query": {
    "match": {
      "distretto": "MI"
    }
  },
  "aggs": {
    "our_buckets": {
      "composite": {
        "size": 1000,
        "sources": [
          { "codiceoggetto": { "terms": { "field": "codiceoggetto.keyword" } } }
        ]
      },
      "aggs": {
        "sort_by_count": {
          "bucket_sort": {
            "sort": [
              { "doc_count": { "order": "desc" } }
            ]
          }
        }
      }
    }
  }
}

注意:这种方式仅对当前返回的1000个桶排序,并非对所有符合条件的桶全局排序后分页,全局排序优先推荐方案一(数据量在size范围内时)。

内容的提问来源于stack exchange,提问作者zabitstack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:15:33