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

如何通过Elasticsearch聚合桶的key获取对应topic文档的_source?

单个Elasticsearch请求实现聚合结果关联获取topic文档内容

完全可以不用parent/child方案,通过嵌套聚合在单个请求里完成需求,具体实现如下:

实现思路

  1. 先对rate文档按topicId做terms聚合,得到所有目标topic的ID
  2. 在每个聚合桶内,嵌套filter聚合筛选出对应ID的topic文档,再用top_hits聚合返回该topic的完整_source数据

请求代码示例

{
  "size": 0, // 无需返回rate文档本身,仅保留聚合结果
  "query": {
    "term": {
      "docType": "rate" // 仅针对rate文档执行聚合逻辑
    }
  },
  "aggs": {
    "topic_groups": {
      "terms": {
        "field": "topicId", // 按rate文档的topicId分组
        "size": 1000 // 根据实际业务调整返回的桶数量上限
      },
      "aggs": {
        "match_topic_doc": {
          "filter": {
            "bool": {
              "must": [
                {"term": {"docType": "topic"}},
                {"term": {"id": "{{key}}"}} // 匹配当前桶对应的topicId
              ]
            }
          },
          "aggs": {
            "topic_full_source": {
              "top_hits": {
                "size": 1,
                "_source": "*" // 返回topic文档的完整_source内容
              }
            }
          }
        }
      }
    }
  }
}

结果说明

  • 外层topic_groups聚合会返回每个topicId对应的聚合桶
  • 每个桶内的topic_full_source节点下,会包含对应topic文档的完整_source数据
  • 若某个topicId无匹配的topic文档,该桶的topic_full_source结果会为空

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:56:09