代码之家  ›  专栏  ›  技术社区  ›  Leonardo

Elasticsearch-按分组求和

  •  0
  • Leonardo  · 技术社区  · 7 年前

    我无法应用链聚合的概念。。。我需要有关此场景的帮助:

    {
      "date":"2019-01-30",
      "value":1234.56,
      "partnerId":9876
    }
    

    我想按日期(月)过滤,并按合作伙伴Id汇总,然后计数,得到如下结果:

    {
       "partnerId": 9876,
       "totalValue": 12345567.87,
       "count": 6574
    }
    

    1 回复  |  直到 7 年前
        1
  •  3
  •   Nishant    7 年前

    您试图实现的目标可以通过子聚合来实现,换句话说,就是聚合内部的聚合。

    parternId terms aggregation 花坛 领域我们将此聚合称为 partners 花坛 count

    partnerId , totalValue value 对于每个partnerId。这可以通过添加 sum aggregation 合作伙伴

    {
      "query": {
        "bool": {
          "filter": {
            "range": {
              "date": {
                "gte": "2019-01-01",
                "lte": "2019-01-31"
              }
            }
          }
        }
      },
      "aggs": {
        "partner": {
          "terms": {
            "field": "partnerId"
          },
          "aggs": {
            "totalValue": {
              "sum": {
                "field": "value"
              }
            }
          }
        }
      }
    }
    

    "aggregations": {
        "partner": {
          "doc_count_error_upper_bound": 0,
          "sum_other_doc_count": 0,
          "buckets": [
            {
              "key": 9876,
              "doc_count": 3,
              "totalValue": {
                "value": 3704.68017578125
              }
            },
            {
              "key": 9878,
              "doc_count": 2,
              "totalValue": {
                "value": 2454.1201171875
              }
            }
          ]
        }
    

    在上面的结果中 key partnerId , doc_count 计数 totalValue.value 总价值