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

如何在ElasticSearch中按documentId分组列出对应serviceName值?

ElasticSearch实现按documentId分组汇总serviceName

当然可以实现这个需求,你可以通过ElasticSearch的聚合功能来完成,核心思路是按documentId字段分组,再收集每个分组下对应的serviceName值。下面提供两种常用的实现方式:

方式一:嵌套Terms聚合(自动去重serviceName)

这种方式会自动对每个documentId下的serviceName去重,适合不需要保留重复值的场景:

POST /你的索引名/_search
{
  "size": 0,  // 不返回原始文档,只返回聚合结果
  "aggs": {
    "按documentId分组": {
      "terms": {
        "field": "documentId",
        "size": 1000  // 调整为你需要的最大分组数量
      },
      "aggs": {
        "收集serviceName": {
          "terms": {
            "field": "serviceName",
            "size": 1000  // 调整为每个分组下最多收集的serviceName数量
          }
        }
      }
    }
  }
}

方式二:Top Hits聚合(保留所有匹配的serviceName)

如果需要保留每个documentId下所有的serviceName(包括重复值,若存在),可以用Top Hits聚合:

POST /你的索引名/_search
{
  "size": 0,
  "aggs": {
    "按documentId分组": {
      "terms": {
        "field": "documentId",
        "size": 1000
      },
      "aggs": {
        "收集serviceName": {
          "top_hits": {
            "size": 1000,
            "_source": {
              "includes": ["serviceName"]  // 只返回serviceName字段
            }
          }
        }
      }
    }
  }
}

结果处理

执行上述查询后,ElasticSearch会返回包含各documentId分组的聚合结果,你可以从每个分组的buckets中提取对应的serviceName值,整理成你需要的1: 2020, 2019这种格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:50:28