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

在Elasticsearch中如何基于数组字段的元素数量实现聚合统计

Elasticsearch 按Itinerary数组字段元素数量聚合方案

完全可以实现该统计需求,以下是两种常用的实现方案:

方案1:运行时字段实时计算(无需修改现有索引结构)

适合临时查询场景,不用调整现有索引的Mapping,通过运行时字段实时计算数组长度后做聚合即可,DSL示例如下:

POST /你的索引名称/_search
{
  "size": 0, // 不返回原始文档,只返回聚合结果
  "runtime_mappings": {
    "itinerary_length": {
      "type": "integer",
      "script": "emit(doc['Itinerary'].size())"
    }
  },
  "aggs": {
    "itinerary_count_stats": {
      "terms": {
        "field": "itinerary_length",
        "size": 6 // 你的数组最多只有6个元素,直接取前6条聚合结果即可
      }
    }
  }
}

*注意:如果你的Itinerary字段配置为nested类型,将上述脚本调整为emit(params._source['Itinerary'].size())即可正常获取数组长度。

聚合返回结果中,itinerary_count_stats下的每个bucket的key就是数组元素数量,doc_count就是对应数量的文档总数,你只需做简单的格式转换就能得到你需要的1 item : 2这类展示结果。

方案2:预存长度字段(性能更优,适合高频查询)

如果该统计是业务高频使用的功能,更推荐你在写入文档时新增一个itinerary_len整数类型字段,直接存储当前文档Itinerary数组的元素数量,后续聚合直接基于该字段查询即可,性能远高于实时计算的方案,DSL示例如下:

POST /你的索引名称/_search
{
  "size": 0,
  "aggs": {
    "itinerary_count_stats": {
      "terms": {
        "field": "itinerary_len",
        "size": 6
      }
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:06:00