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

Elasticsearch terms聚合桶按created_by.id降序排序失败求助

解决Elasticsearch Terms聚合桶排序问题

你说的没错,top_hits的sort只负责每个桶内返回的文档排序,完全不影响桶本身的排列顺序。要让terms聚合的buckets按created_by.id降序排列,得直接在terms聚合本身里设置order参数,而不是依赖top_hits的配置。

修改后的查询示例

{
  "size": 0,
  "aggs": {
    "filtered_data": {
      "filter": {
        "bool": {
          "must": [
            {"range": {"published_at": {"gte": "2019-08-01", "lte": "2023-10-30"}}},
            {"term": {"status": "published"}}
          ]
        }
      },
      "aggs": {
        "group_by_creator": {
          "terms": {
            "field": "created_by.id",
            // 重点:设置桶按key降序排列
            "order": {"_key": "desc"}
          },
          "aggs": {
            "latest_hit": {
              "top_hits": {
                "size": 1,
                // 这里的sort控制桶内文档的排序,和桶的顺序无关
                "sort": [{"created_by.id": "desc"}]
              }
            }
          }
        }
      }
    }
  }
}

关键说明

  • terms聚合默认是按_count(每个桶的文档数量)降序排列,你之前看到key34在前,大概率是因为它的文档数比key52多。
  • 把order设置为{"_key": "desc"},就能让桶直接按created_by.id(也就是聚合的key)降序排列,实现key52在前、key34在后的效果。
  • 如果不需要桶内文档排序,top_hits里的sort可以删掉,不影响桶的顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:46:03