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

如何统计ElasticSearch文档attachments数组的总数量及单文档对应数量

ElasticSearch attachments数组统计实现方案

1. 统计所有文档attachments数组元素总个数

使用sum聚合配合脚本动态计算每个文档的attachments数组长度,再累加得到全局总个数,查询DSL如下:

GET /attach_info/_search
{
  "size": 0,
  "aggs": {
    "total_attachments": {
      "sum": {
        "script": "params._source.attachments.length"
      }
    }
  }
}

返回结果中aggregations.total_attachments.value即为全局总个数,对应示例返回值为5。

2. 按文档ID统计对应attachments数组元素个数

如果需要查询指定ID的数组长度,可先通过terms过滤目标ID,再按ID分组聚合计算每组的数组长度,查询DSL如下:

GET /attach_info/_search
{
  "size": 0,
  "query": {
    "terms": {
      "id": ["AT23456", "AT23458"]
    }
  },
  "aggs": {
    "group_by_doc_id": {
      "terms": {
        "field": "id.keyword",
        "size": 1000
      },
      "aggs": {
        "attach_count": {
          "sum": {
            "script": "params._source.attachments.length"
          }
        }
      }
    }
  }
}

注意:如果你的id字段本身就是keyword类型,可将聚合的field值改为id。
返回结果中aggregations.group_by_doc_id.buckets下每个bucket的key为文档ID,attach_count.value为对应文档的attachments数组长度,对应示例中AT23456返回2、AT23458返回3。

性能优化提示

如果该统计是高频查询,建议写入文档时直接新增attach_count字段存储attachments数组长度,查询时直接对该字段做聚合,性能远高于动态脚本计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:27:03