Elasticsearch:从聚合桶中过滤或获取值

时间:2015-01-22 12:42:44

标签: elasticsearch

在Elasticsearch中,我有一个索引,其中包含带有时间戳的文档和观察到的Web服务请求的数量。

我想执行汇总,以便每天获取观察到最大请求数的小时(高峰时段)。

我通过执行以下请求成功获得结果:

{
   "aggregations" : {
      "week_summary" : {
        "filter" : {"range": {"@timestamp": {"gte": "2015-01-20||-7d","lte": "2015-01-20"}}},

        "aggregations" : {
           "oneday_interval" : {
              "date_histogram" : {"field" : "@timestamp", "interval" : "1d","order" : { "_key" : "desc" }},                             
              "aggregations" : {
                 "peak_hour_histogram" : {
                    "date_histogram" : {"field" : "@timestamp", "interval" : "1h","order" : { "peak_request_count.value" : "desc" }},
                    "aggregations" : {
                       "peak_request_count" : {
                          "sum" : { "field" : "request_count"}
                        }
                    }     
                  }
              }
           }
        }
      }
   },
   size : 0
}

这在某种意义上说工作正常:由于能够对子聚合值上的日期直方图进行排序,peak_hour_histogram存储桶数组中的第一项确实对应于高峰时段。

尽管如此,我并不需要所有其他水桶项目(即一天中的其他23小时),我只想收到第一项。我尝试使用top_hits但没有任何成功。

您知道进行此过滤的方法吗?

注意:在实际使用案例中,我的聚合返回大约3MB的数据。因此,过滤所有这些无用的值变得很重要。

感谢您的回答。

1 个答案:

答案 0 :(得分:0)