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

如何计算ELK中存款与取款聚合总和的差值?

问题:计算DEPOSIT与WITHDRAW的value总和差值

场景说明

索引文档结构示例:

id:1
type: Deposit
value:12
timestamp:2022.10.09T00.00.00
####
id:2 
type: withdraw
value:15
timestamp:2022.10.9T00.00.00
####
id:3
type: Deposit
value:17
timestamp:2022.10.09T11.00.00
....

之前执行的聚合查询:

"aggs": {
    "s1": {
      "terms": {
        "field": "type",
        "size": 10
      },
      "aggs": {
        "SUM": {
          "sum": {
            "field": "value"
          }
        }
      }
    }
}

返回结果:

"buckets" : [
{
"key" : "DEPOSIT",
"doc_count" : 9,
"SO" : {
"value" : 78983
}
},
{
"key" : "WITHDRAW",
"doc_count" : 9,
"SO" : {
"value" : 777445
}
}
]

解决方案

要计算DEPOSIT的value总和减去WITHDRAW的value总和,可以使用Elasticsearch的bucket_script聚合,它支持在已有聚合的buckets基础上执行脚本运算。

完整查询语句如下:

{
  "aggs": {
    "s1": {
      "terms": {
        "field": "type",
        "size": 10
      },
      "aggs": {
        "SUM": {
          "sum": {
            "field": "value"
          }
        }
      }
    },
    "deposit_minus_withdraw": {
      "bucket_script": {
        "buckets_path": {
          "depositSum": "s1['DEPOSIT'].SUM",
          "withdrawSum": "s1['WITHDRAW'].SUM"
        },
        "script": "params.depositSum - params.withdrawSum"
      }
    }
  }
}

关键说明

  • bucket_script 作为顶级聚合,引用s1聚合下的两个目标bucket(DEPOSIT和WITHDRAW)的求和结果。
  • buckets_path 定义取值路径:s1['DEPOSIT'].SUM 对应s1聚合中key为DEPOSIT的bucket下的SUM聚合值,s1['WITHDRAW'].SUM同理。
  • script 字段执行减法运算,直接返回两者的差值。

注意:要保证buckets_path中指定的key(DEPOSIT、WITHDRAW)与聚合结果中的key完全一致,需匹配字段的大小写或归一化规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:31:27