elasticsearch每小时直方图计算

时间:2016-01-28 14:14:10

标签: elasticsearch

此dsl返回索引日期字段中的所有小时数。但是我需要一个"小时值的总值"在索引中。所以我只希望24个桶因此每个桶包含一个小时,这个桶中的值必须是这个小时内所有文档的字段总数(" respsize")

{
   "size":0,
   "query":{
      "filtered":{
         "filter":{
         }
      }
   },
   "aggs":{
      "aggs1":{
         "date_histogram":{
            "field":"loggingdate",
            "interval":"hour",
            "format":"k",
            "order":{
               "aggs2":"desc"
            }
         },
         "aggs":{
            "aggs2":{
               "sum":{
                  "field":"respsize"
               }
            }
         }
      }
   }
}

exmp:返回

"aggs1": {
         "buckets": [
            {
               "key_as_string": "5",
               "key": 1452852000000,
               "doc_count": 29500,
               "aggs2": {
                  "value": 1
               }
            },
            {
               "key_as_string": "6",
               "key": 1452866400000,
               "doc_count": 15941,
               "aggs2": {
                  "value": 2
               }
            },
            {
               "key_as_string": "5",
               "key": 1452870000000,
               "doc_count": 6121,
               "aggs2": {
                  "value": 3
               }
            },

但我想要这个:

"aggs1": {
         "buckets": [
            {
               "key_as_string": "5",
               "key": 1452852000000,
               "doc_count": 29500,
               "aggs2": {
                  "value": 4
               }
            },
            {
               "key_as_string": "6",
               "key": 1452866400000,
               "doc_count": 15941,
               "aggs2": {
                  "value": 2
               }
            }
            },

1 个答案:

答案 0 :(得分:1)

然后您可以使用terms aggregation。使用以下查询:

{
"size":0,
"query":{
  "filtered":{
     "filter":{
     }
  }
},
"aggs":{
  "aggs1":{
     "terms":{
        "script": "new    
DateTime(doc['loggingdate'].value).getHourOfDay()",

        "order":{
           "aggs2":"desc"
        }
     },
     "aggs":{
        "aggs2":{
           "sum":{
              "field":"respsize"
           }
        }
     }
  }
 }
}

我想它会取得你想要的结果。