【问题标题】:elasticsearch - sum of aggregated valueselasticsearch - 聚合值的总和
【发布时间】:2021-11-14 03:00:29
【问题描述】:

假设我有以下数据

{
    "quantity" : 1,
    "amount" : 10,
    "discount" : 1
}

{
    "quantity" : 4,
    "amount" : 12,
    "discount" : 2
}

我可以使用以下查询获得这些的汇总结果,

{
   ...
   "aggs" : {
     "sumOfQuantity" : {
        "sum" : {
           "field" : "quantity"
        }
     },
     "SumOfAmount" : {
        "sum" : {
           "field" : "amount"
        }
     },
     "SumOfDiscount" : {
        "sum" : {
           "field" : "discount"
        }
     }
   }
}

使用上面的查询,我可以得到所需字段的总和。现在我还想减去汇总的 SumOfAmount 和 SumOfDiscount (SumOfAmount - SumOfDiscount)。我怎样才能实现它?

提前致谢!!

【问题讨论】:

    标签: amazon-web-services elasticsearch search elasticsearch-aggregation opensearch


    【解决方案1】:

    您可以使用run time mapping

    查询

    {
      "size": 0,
      "runtime_mappings": {
        "net_amount": {
          "type": "double",
          "script": {
            "source": "emit(doc['amount'].value - doc['discount'].value)"
          }
        }
      },
      "aggs": {
        "sumOfQuantity": {
          "sum": {
            "field": "quantity"
          }
        },
        "SumOfAmount": {
          "sum": {
            "field": "amount"
          }
        },
        "SumOfDiscount": {
          "sum": {
            "field": "discount"
          }
        },
        "NetAmmount":{
          "sum": {
            "field": "net_amount"
          }
        }
      }
    }
    

    结果

     "aggregations" : {
        "sumOfQuantity" : {
          "value" : 5.0
        },
        "NetAmmount" : {
          "value" : 19.0
        },
        "SumOfAmount" : {
          "value" : 22.0
        },
        "SumOfDiscount" : {
          "value" : 3.0
        }
      }
    

    【讨论】:

      猜你喜欢
      • 2019-06-14
      • 1970-01-01
      • 2018-04-20
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多