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

如何在指定时间区间内对Elasticsearch文档的大小求和?

解决Elasticsearch指定时间区间内文档大小求和的问题

你的聚合结果为0是因为错误使用了doc['_source'].bytes作为sum聚合的字段引用方式,Elasticsearch无法通过这种方式正确读取字段值。以下是正确的实现方式:

正确查询(数值类型字段)

如果bytes字段在索引中是数值类型(如long、double),直接指定字段名即可:

GET /events/_search
{
  "query": {
    "bool": {
      "must": [
        {"range": {"ts": {"gte": "2022-10-10T00:00:00Z", "lt": "2022-10-21T00:00:00Z"}}}
      ]
    }
  },
  "aggs": {
    "total_size": {
      "sum": {
        "field": "bytes"
      }
    }
  },
  "size": 0  // 仅返回聚合结果,不返回匹配文档,提升查询性能
}

处理字符串类型的bytes字段

如果bytes字段是字符串类型,需要通过脚本将其转为数值后再求和:

GET /events/_search
{
  "query": {
    "bool": {
      "must": [
        {"range": {"ts": {"gte": "2022-10-10T00:00:00Z", "lt": "2022-10-21T00:00:00Z"}}}
      ]
    }
  },
  "aggs": {
    "total_size": {
      "sum": {
        "script": {
          "source": "doc['bytes'].value != null ? Double.parseDouble(doc['bytes'].value) : 0"
        }
      }
    }
  },
  "size": 0
}

注意:脚本转换会降低查询性能,建议在索引文档时就将bytes字段设置为数值类型,从根源上避免这类问题。

内容的提问来源于stack exchange,提问作者blue-sky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:50:25