【问题标题】:Aggregated output from ElasticSearch来自 ElasticSearch 的聚合输出
【发布时间】:2020-07-10 11:52:59
【问题描述】:

我正在使用 ElasticSearch 存储大约 5000 万条数据。 数据格式如下。

_id:5e444fc1c5e86c84d1044aeb
meter_id:"jhk"
date:2017-06-17T18:39:28.795+00:00
activePower:Object
unit:"kwh"
Active Power L1:"0"
Active Power L2:"0"
Active Power L3:"0"
Total Active Power:"5"
reactivePower:Object
apparentPower:Object
frequency:Object
thd:Object

现在我想获取两个日期之间的部分数据,并根据单个日期对其进行分组,并将总有功功率字段添加到特定日期组。

预期输出

[
{ date: '04-19', totalActivePower: 5000},
{ date: '05-19', totalActivePower: 6000}
]

【问题讨论】:

    标签: node.js elasticsearch elasticsearch-aggregation


    【解决方案1】:

    你可以使用date_histogram聚合

    查询

    {
      "size": 0, 
      "query": {
        "range": {    --> to filter between dates, you can also use filter aggregation
          "date": {
            "gte": "2017-06-16",
            "lte": "2017-06-17"
          }
        }
      },
      "aggs": {
        "perday": {  
          "date_histogram": {   ---> will split documents on per day basis
            "field": "date",
            "interval": "day"
          },
          "aggs": {
            "totalacticepower": { -- sum of field Total Active Power on that day
              "sum": {
                "field": "Total Active Power"
              }
            }
          }
        }
      }
    }
    

    结果:

    "aggregations" : {
        "perday" : {
          "buckets" : [
            {
              "key_as_string" : "2017-06-17T00:00:00.000Z",
              "key" : 1497657600000,
              "doc_count" : 1,
              "totalacticepower" : {
                "value" : 5.0
              }
            }
          ]
        }
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      • 2017-09-24
      • 1970-01-01
      • 2018-09-26
      相关资源
      最近更新 更多