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

如何在OpenSearch中按company_id分组统计并返回company_name

在OpenSearch中按company_id分组并返回company_name和统计数

要在按company_id分组统计文档数量的同时返回对应的company_name,可以通过在terms聚合下添加子聚合实现。由于同一company_id对应的company_name通常是唯一的,推荐使用top_hits子聚合获取每个分组的company_name,具体查询语句如下:

GET test1/_search
{
  "size": 0,
  "aggs": {
    "group_by_company": {
      "terms": {
        "field": "identity.company.company_id",
        "size": 100
      },
      "aggs": {
        "company_detail": {
          "top_hits": {
            "size": 1,
            "_source": {
              "includes": ["identity.company.company_name"]
            }
          }
        }
      }
    }
  }
}

关键逻辑说明

  • 外层terms聚合:按company_id分组,返回的doc_count字段即为该分组的文档统计数
  • 内层top_hits聚合:仅返回每个分组内的第一个文档的company_name字段(因同一company_id下company_name一致,取单个结果即可)

示例返回结果

{
  "aggregations": {
    "group_by_company": {
      "buckets": [
        {
          "key": 1,
          "doc_count": 2,
          "company_detail": {
            "hits": {
              "hits": [
                {
                  "_source": {
                    "identity": {
                      "company": {
                        "company_name": "Test Company 1"
                      }
                    }
                  }
                }
              ]
            }
          }
        },
        {
          "key": 2,
          "doc_count": 1,
          "company_detail": {
            "hits": {
              "hits": [
                {
                  "_source": {
                    "identity": {
                      "company": {
                        "company_name": "Test Company 2"
                      }
                    }
                  }
                }
              ]
            }
          }
        },
        {
          "key": 3,
          "doc_count": 1,
          "company_detail": {
            "hits": {
              "hits": [
                {
                  "_source": {
                    "identity": {
                      "company": {
                        "company_name": "Test Company 3"
                      }
                    }
                  }
                }
              ]
            }
          }
        }
      ]
    }
  }
}

备选方案(若company_name为keyword类型)

如果company_name字段已映射为keyword类型,且能确保company_id与company_name严格一一对应,也可以用脚本拼接字段作为分组key:

GET test1/_search
{
  "size": 0,
  "aggs": {
    "group_by_company": {
      "terms": {
        "script": "doc['identity.company.company_id'].value + '|' + doc['identity.company.company_name'].value",
        "size": 100
      }
    }
  }
}

这种方式需要自行拆分结果中的key来获取两个字段的值,相比top_hits方式不够直观,推荐优先使用第一种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:23:19