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

如何在Elasticsearch聚合结果中展示与activity.kw对应的activity.label文本

实现方案

方案1:使用top_hits子聚合(无需改动索引,开箱即用)

直接在现有terms聚合下新增top_hits子聚合,即可在每个桶内返回对应的activity.label值,修改后的查询语句如下:

GET /my-index/_search
{
  "size": 0,
  "query": {
    "match_all": {}
  },
  "aggs": {
    "group_by_state" : {
      "terms" : {
        "field" : "activity.kw",
        "size" : 3000
      },
      "aggs": {
        "get_label": {
          "top_hits": {
            "size": 1,
            "_source": ["activity.label"]
          }
        }
      }
    }
  }
}

返回的聚合结果中,每个bucket下会多一个get_label字段,取hits.hits[0]._source.activity.label就是你需要的label值,做简单的结果处理就能得到你要的结构。
如果同一个activity.kw可能对应多个不同的activity.label,可以在top_hits中新增sort规则,取你需要的那条对应的label即可。

方案2:复合键预聚合(适合大数量场景,性能更高)

如果activity.kw和activity.label是严格一一对应的关系,可以在索引写入阶段预先把两个值拼接成一个keyword类型的复合字段,比如activity.kw_with_label,值格式类似0009||something。聚合时直接对该字段做terms聚合,返回的key拆分后即可同时拿到kw和label值,查询性能比方案1高很多,适合数据量级大、查询频率高的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 13:24:03