You need to enable JavaScript to run this app. Elasticsearch如何使用字符串数组对数组字段执行agg过滤统计
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch如何使用字符串数组对数组字段执行agg过滤统计

Elasticsearch 数组字段指定值聚合统计方案

你可以通过两种不需要正则的方式实现需求,直接传入目标字符串值数组即可过滤聚合结果:

方案1:Terms聚合精确值数组匹配(最简实现)

Terms聚合的include参数支持两种模式,除了正则匹配外还支持传入精确值数组,不会触发正则解析,刚好符合你的使用要求:

POST /你的索引名称/_search
{
  "size": 0, // 不需要返回原始文档,仅返回聚合结果
  "aggs": {
    "specified_color_stats": {
      "terms": {
        "field": "colors.keyword", // 必须使用keyword类型字段做精确值聚合
        "include": ["red"] // 直接传入你需要统计的目标值数组,可扩展任意多个值
      }
    }
  }
}

按照你提供的样例数据,返回结果中specified_color_stats的buckets仅会出现red的统计结果,数值为3,其他颜色值会被自动排除。

方案2:Filters聚合(适合自定义统计场景)

如果你需要为每个统计值自定义bucket名称、或者附加额外过滤条件,可以使用Filters聚合:

POST /你的索引名称/_search
{
  "size": 0,
  "aggs": {
    "custom_color_stats": {
      "filters": {
        "filters": {
          "red_total": { "term": { "colors.keyword": "red" } },
          // 可扩展其他需要统计的值,例如 "purple_total": { "term": { "colors.keyword": "purple" } }
        }
      }
    }
  }
}

返回结果中每个自定义key对应的doc_count就是该值的命中文档数。

注意事项

  • 统计必须使用字段的keyword类型,如果使用text类型字段会导致分词后匹配错误,无法统计到准确的精确值结果。
  • 两种方案均不需要编写正则,直接传入目标字符串值即可,不会匹配到无关的其他值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 06:15:04