Elasticsearch:使用间隔小时进行聚合

时间:2015-11-22 04:27:09

标签: node.js elasticsearch aggregate

我每小时有大约100份文件。每个文档都有viewers属性(整数)。

到那天结束时,我希望聚合一个包含24个文档的数组,每天每小时一个,由具有最高viewers计数的文档表示。

到目前为止我的查询:

// query, fetch all documents of a specific day
var query = {
  bool : {
    filter : [
      {
        range : {
          'created' : {
            gte : day,
            lte : day + (60 * 60 * 24)
          }
        }
      }
    ]
  }
}

// aggregation
var aggs = {
  // ?
}

1 个答案:

答案 0 :(得分:0)

我认为可以使用Date HistogramTop Hits聚合来实现。看看这个:

{
  "size": 0,
  "aggs": {
    "articles_over_time": {
      "date_histogram": {
        "field": "created",
        "interval": "minute"
      },
      "aggs": {
        "Viewers": {
          "top_hits": {
            "size": 1,
            "sort": [
              {
                "viewers": {
                  "order": "desc"
                }
              }
            ]
          }
        }
      }
    }
  }
}

Date Histogram聚合将在过滤日期范围内为每小时创建存储桶,并且热门点击会使带有最高查看者的文档恢复(我们按照降序排列文档,并且排名前1)。

让我知道这是否有效。