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

Elasticsearch Composite聚合能否去除doc_count等字段仅返回目标值

解决方案

Elasticsearch 原生聚合返回的结构固定,无法直接输出你期望的纯数组格式,但可以通过以下两步快速实现需求:

步骤1:使用filter_path参数过滤冗余响应

在请求URL中添加filter_path参数,只保留你需要的字段,彻底去掉took、超时状态、分片信息、命中结果等冗余内容:
请求URL示例:

POST /你的索引名/_search?filter_path=aggregations.*.buckets.key.my_stoid

请求DSL保持你原有写法即可:

{
    "aggs": {
        "my_buckets": {
            "composite": {
                "size": 10000,
                "sources": [{
                        "my_stoid": {
                            "terms": {
                                "field": "stoId"
                            }
                        }
                    }
                ]
            }
        }
    },
    "size": 0
}

此时返回的响应会精简为以下结构:

{
  "aggregations" : {
    "composite#my_buckets" : {
      "buckets" : [
        {
          "key" : {
            "my_stoid" : "1"
          }
        },
        {
          "key" : {
            "my_stoid" : "2102"
          }
        }
      ]
    }
  }
}

步骤2:客户端简单映射得到目标格式

对返回的精简结果做一层简单的遍历映射即可得到你要的数组,不同语言实现逻辑一致,以下是JavaScript示例:

const stoIdList = result.aggregations['composite#my_buckets'].buckets.map(item => item.key.my_stoid)

最终得到的stoIdList就是["1", "2102", "8000", "9999", "KB", "KV"]的格式。

注意事项

如果你的stoId唯一值总数量超过了请求中设置的size:10000,需要结合响应返回的after_key做分页拉取,才能拿到全量的唯一值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:09:04