2014-11-04 22 views
0

我查詢獲得基於DATE_RANGE彙總數據,如使用該彈性檢索日期範圍的聚集不給完整的數據

"aggs": { 
     "range": { 
      "date_range": { 
       "field": "sold", 
       "ranges": [ 
        { "from": "2014-11-01", "to": "2014-11-30" }, 
        { "from": "2014-08-01", "to": "2014-08-31" } 
       ] 
      } 
     } 
    } 

下面我得到這個響應

"aggregations": { 
    "range": { 
     "buckets": [ 
     { 
      "key": "2014-08-01T00:00:00.000Z-2014-08-31T00:00:00.000Z", 
      "from": 1406851200000, 
      "from_as_string": "2014-08-01T00:00:00.000Z", 
      "to": 1409443200000, 
      "to_as_string": "2014-08-31T00:00:00.000Z", 
      "doc_count": 1 
     }, 
     { 
      "key": "2014-11-01T00:00:00.000Z-2014-11-30T00:00:00.000Z", 
      "from": 1414800000000, 
      "from_as_string": "2014-11-01T00:00:00.000Z", 
      "to": 1417305600000, 
      "to_as_string": "2014-11-30T00:00:00.000Z", 
      "doc_count": 2 
     } 
     ] 
    } 
    } 

但我並不是只有doc_count,我還需要滿足這個範圍的完整聚合數據, 有任何方法可以得到s..please幫助

回答

0

目前還不清楚你在找什麼其他領域,所以我列舉了幾個例子。

通過在您的第一個嵌套中嵌套另一個aggs,您可以要求Elasticsearch撤回其他值,例如, averagessumscounts,最小值,最大值,統計值,etc

這個例子查詢將帶回field_count - 的myfield 實例的計數,並返回order_count - 基於腳本的總和。

"aggs": { 
    "range": { 
     "date_range": { 
      "field": "sold", 
      "ranges": [ 
       { "from": "2014-11-01", "to": "2014-11-30" }, 
       { "from": "2014-08-01", "to": "2014-08-31" } 
      ] 
     } 
    } 
}, 
"aggs" : { 
     "field_count": {"value_count" : { "field" : "myfield" } }, 
     "order_count": {"sum" : {"script" : " doc[\"output_msgtype\"].value == \"order\" ? 1 : 0"} } }} 
} 
+0

嗨ollyc,謝謝,但我想知道如何獲得滿足此條件的實際數據,請參閱https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/elasticsearch/4XLDTUkUzgg/XqgghCV5EwkJ – 2014-11-06 05:31:46

+0

你能更新你的問題嗎?您的要求並不明確 - 您是在詢問聚合總計還是聚合中的過濾? – 2014-11-07 08:48:46

+0

嗨ollyc,假設我有以下數據 [ { 「價」:20000, 「顏色」: 「紅色」, 「作」: 「本田」, 「賣」: 「2014年11月5日」 },{ 「價」:20000, 「顏色」: 「紅色」, 「作」: 「本田」, 「賣」: 「2014年11月5日」 },{ 「價格「:30000, 「顏色」: 「綠色」, 「作」: 「福特」, 「賣」: 「2014年5月18日」 } ] 我查詢 「AGGS」:{ 「範圍」:{ 「DATE_RANGE」:{ 「場」: 「賣」, 「範圍」:[{ 「從」:「2014年11月1日「,」to「:」2014-11-30「} ] } 續。 – 2014-11-07 14:35:43

0

如果您沒有在數據中尋找任何總計,數量和平均數,那麼聚合就無濟於事。

我會改爲每個範圍運行一次標準查詢。例如:

curl -XGET 'http://localhost:9200/test/cars/_search?pretty' -d '{ 
"fields" : ["price", "color", "make", "sold" ], 
"query":{ 
    "filtered": { 
    "query": { 
     "match_all" : { } 
    }, 
"filter" : { 
     "range": {"sold": {"gte": "2014-09-21T20:03:12.963","lte": "2014-09-24T20:03:12.963"}}} 
    } 
    } 
}' 

根據需要重複此查詢,但每次都修改範圍。

+0

您好ollyc,THanks,我知道這種方式,我需要獲取基於聚合(或分組)的數據,是否有可能通過聚合獲取數據 – 2014-11-08 09:00:17