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

如何基于rating分组返回Elasticsearch中title字段的数组集合?

Elasticsearch按rating分组并返回对应title数组的实现方案

方法一:Terms聚合+Top Hits(简单易上手)

通过terms聚合按rating字段分组,嵌套top_hits聚合仅提取每组的title字段,避免返回完整文档:

GET /你的索引名/_search
{
  "size": 0, // 不返回原始文档,仅保留聚合结果
  "aggs": {
    "rating_groups": {
      "terms": {
        "field": "rating" // 若rating是文本类型,需用rating.keyword确保精确分组
      },
      "aggs": {
        "group_titles": {
          "top_hits": {
            "size": 10000, // 设置足够大的值覆盖分组内所有文档
            "_source": ["title"] // 仅返回title字段
          }
        }
      }
    }
  }
}

返回结果中,每个rating_groups.buckets条目下的group_titles.hits.hits数组,可直接提取对应rating的所有title值。

方法二:Scripted Metric聚合(直接生成数组)

如果需要直接返回title数组而非嵌套结构,用scripted_metric聚合在分组内直接构建title数组:

GET /你的索引名/_search
{
  "size": 0,
  "aggs": {
    "rating_groups": {
      "terms": {
        "field": "rating"
      },
      "aggs": {
        "title_array": {
          "scripted_metric": {
            "init_script": "state.titles = []",
            "map_script": "state.titles.add(doc['title.keyword'].value)", // title为text类型时用keyword子字段,避免分词
            "combine_script": "return state.titles",
            "reduce_script": "return params.vals.flatten()"
          }
        }
      }
    }
  }
}

此查询返回的每个bucket中,title_array.value就是对应rating的title数组,无需二次遍历提取。

注意事项

  • 确保rating字段映射正确:数值类型可直接分组,文本类型需用keyword子字段实现精确分组。
  • 若分组内文档量极大,top_hits的size不宜过高,避免内存溢出,此时scripted_metric更高效。
  • 若title是text类型,必须用doc['title.keyword'].value获取完整字符串,否则会返回分词后的词语数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:25:26