2016-11-24 53 views
0

次のクエリを実行しようとしています。私は文書に3つの属性を持っています STATUS - "FAIL"、 "PASS"、 "INVALID"になる可能性があります DATE - 日付と時刻が含まれています。Elasticsearch集計付き日付範囲クエリ

私は例えば

各ステータスのカウントの日々の数をしたい:日付:2016年11月9日、STATUS:FAIL、カウント:120
日:2016年11月9日、STATUS:PASSを、カウント:150

私は最後の1ヶ月間のデータ、2月をしたいので、

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の毎日のカウントを与えますutをすべてのレコードに適用します。以下のような範囲フィルタを追加したいと考えています。

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

ただし、これらの2つのクエリの内容をマージすることはできません。私はベストを尽くしました。どんな助けでも大歓迎です。

+0

必要なのは、日付範囲あなたのES検索クエリの中で? – Kulasangar

答えて

0

私が正しく理解している場合は、sub-aggregationsを使用する必要があります。

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

まずあなたが一日でバケツを取得し、このバケットのそれぞれの内部で使用すると、ステータス値でバケツを取得します:

クエリは次のようになります。

+0

はい、それは私にすべてのレコードを1日に渡します。過去90日間のレコードのような範囲問合せを適用したい。どうやってやるの ? – Aniket

0

だけでなく、あなたは、このようなクエリおよび集計を組み合わせることができます。..クエリを追加する必要があります。

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

「d」はrepresnt日です。このクエリでは、すべての文書を今日まで90日以内に尋ねて、最後の猶予期間からの猶予期間を追加します。