首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何计算麋鹿多重聚集结果的差异?

如何计算麋鹿多重聚集结果的差异?
EN

Stack Overflow用户
提问于 2022-11-01 06:57:39
回答 1查看 17关注 0票数 0

我有一个文件索引是:

代码语言:javascript
运行
复制
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
....

因此,我运行多个聚合,例如:

代码语言:javascript
运行
复制
"aggs": {
    "s1": {
      "terms": {
        "field": "type",
        "size": 10
      },
      "aggs": {
        "SUM": {
          "sum": {
            "field": "value"
          }
        }
      }
    }

我的结果是:

代码语言:javascript
运行
复制

“桶”:[{“键”:“存”,"doc_count“:9,”所以“:{”值“:78983 },{”键“:”退出“,"doc_count”:9,"SO“:{”值“:777445 }

代码语言:javascript
运行
复制

但我想计算一下“存款价值-取款价值”。这个查询是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-01 08:30:43

为此,可以使用bucket_script聚合。桶脚本aggs如下所示。

代码语言:javascript
运行
复制
        "diff": {
          "bucket_script": {
            "buckets_path": {
              "my_var1": "s1['field_value']>s2",
              "my_var2": "s1['field_value']>s2"
            },
            "script": "params.my_var1 - params.my_var2"
          }
        }

我分享下面的细节和解决方案。

代码语言:javascript
运行
复制
POST test_stackoverflow_question/_bulk
{"index":{}}
{"id":"1", "type": "Deposit", "value":12, "timestamp":"2022.10.09T00.00.00"}
{"index":{}}
{"id":"2", "type": "withdraw", "value":15, "timestamp":"2022.10.9T00.00.00"}
{"index":{}}
{"id":"3", "type": "Deposit", "value":17, "timestamp":"2022.10.09T11.00.00"}

同级管道ag可以选择从多个桶中选择特定的密钥,如果术语是指多部分聚合(如agg )的话。例如,bucket_script可以选择(通过包键)两个自定义桶来执行计算:

代码语言:javascript
运行
复制
GET test_stackoverflow_question/_search
{
  "size": 0,
  "aggs": {
    "calculate_diff": {
      "filters": {
        "filters": {
          "all": {
            "match_all": {}
          }
        }
      },
      "aggs": {
        "s1": {
          "terms": {
            "field": "type.keyword",
            "size": 10
          },
          "aggs": {
            "s2": {
              "sum": {
                "field": "value"
              }
            }
          }
        },
        "diff": {
          "bucket_script": {
            "buckets_path": {
              "my_var1": "s1['Deposit']>s2",
              "my_var2": "s1['withdraw']>s2"
            },
            "script": "params.my_var1 - params.my_var2"
          }
        }
      }
    }
  }
}

参考文献:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-bucket-script-aggregation.html https://www.elastic.co/guide/en/elasticsearch/reference/7.17/search-aggregations-pipeline.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74272497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档