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

如何在Elasticsearch查询中合并terms聚合桶并自定义返回key名称

可以通过Elasticsearch原生查询实现该需求,无需在客户端做二次聚合处理,核心方案是使用Painless脚本改造terms聚合的分组逻辑,在ES计算聚合的阶段就完成指定桶的合并。

实现原理

在terms聚合中使用自定义脚本替代直接指定字段:判断country字段值如果为KR、JP、US三者之一,就统一返回NEW_RESULT作为分组key,其余值直接返回原值作为分组key,ES会自动按脚本返回的key做桶聚合,天然得到合并后的统计结果。

改造后的完整查询语句

GET /_search
{
  "size" : 0,
  "query" : {
    "ids" : {
      "types" : [ ],
      "values" : [ "someId1", "someId2", "someId3" ... ]
    }
  },
  "aggregations" : {
    "how_to_merge" : {
      "terms" : {
        "script": {
          "lang": "painless",
          "source": "def c = doc['country'].value; return ['KR','JP','US'].contains(c) ? 'NEW_RESULT' : c;"
        },
        "size" : 50
      }
    }
  }
}

性能说明

该方案使用的Painless脚本是ES原生支持的轻量脚本语言,聚合阶段执行效率极高,不会额外增加过多查询开销,完全可以满足大数据量场景下的性能要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:45:03