2016-11-24 199 views
0

我想執行以下查詢。我在文檔 中有3個屬性狀態 - 可以是「失敗」,「通過」,「無效」 DATE - 包含日期和時間。Elasticsearch日期範圍查詢與聚合

我想每個狀態

如每天數數:日期:2016年11月9日,STATUS:FAIL,計數:120
日期:2016年11月9日,STATUS:PASS,數:150

我想去年一個月的數據,二月份和等

SearchRequest requestQuery = 
Requests.searchRequest(ConstantsValue.indexName) 
    .types(ConstantsValue._Type) 
    .source("{size:999999," 
    + "\"_source\" : " 
    + "[\"DTCREATED\", \"STATUS\"]"    
    + ",\"aggs\": "  
    + "{\"group_by_STATUS\": {\"terms\": {\"field\": \"STATUS\"}," 
    + "\"aggs\" : " 
    + "{\"group_by_DATE\" : {\"date_histogram\" : " 
    + "{\"field\" : \"DTCREATED\", \"interval\" : \"day\"," 
    + "\"format\" : \"yyyy-MM-dd\" }," 
    + "\"aggs\" : " 
    + "{\"grades_count\" : { \"value_count\" : { \"field\" : \"STATUS\" } }}}}}}}"); 

此代碼給我的每個狀態b的每日計數用於所有記錄。並且想要添加如下所示的範圍過濾器。

+"\"query\": {" 
+" \"filtered\": {" 
+" \"filter\": {" 
+ "\"range\": { \"DTCREATED\": { \"gte\": \"now-90d/d\" }}" 
+"}}}}}"); 

但我無法合併這兩個查詢的內容。我盡力了。任何幫助是極大的讚賞。

+0

您需要的是確定日期範圍在您的ES搜索查詢中? – Kulasangar

回答

0

如果我理解正確,則需要使用sub-aggregations

查詢看起來是這樣的:

"aggs" : { 
    "days" :{ 
    "date_histogram" : { 
     "field" : "DTCREATED", 
     "interval" : "day" 
    } 
    }, 
    "aggs" : { 
    "statuse_in_day" : { 
     "terms" : { 
      "field" : "STATUS" 
     } 
    } 
} 

首先,你一天一桶和內分別關於該桶,你將狀態值獲得桶。

+0

是的,但它會在白天給我所有記錄。我想只應用最近90天記錄的範圍查詢。我怎樣才能做到這一點 ? – Aniket

0

以及你需要添加查詢..你可以合併查詢和聚合這樣的:

"query": { 
    "range": { 
     "@timestamp": { 
      "from": "now-90d" 
     } 
    } 
}, 
"aggs" : {"..."} 

的「d」爲represnt天。在這個查詢中,你詢問所有文件從「現在 - 90天」直到今天,並且添加從最後一個數據集中的集成
您可以在這裏查詢查詢elasticsearch range query