2016-10-26 167 views
1

我想在彈性搜索查詢的日期字段上應用group by子句。這是我的代碼。Elasticsearch中的聚合

SearchRequestBuilder srb = client 
       .prepareSearch(ConstantsValue.indexName) 
       .setTypes(ConstantsValue._Type) 
       .addAggregation(

         AggregationBuilders 
          .dateHistogram("aggs") 
          .field("DTCREATED") 
          .interval(Interval.MONTH) 
          .format("yyyy-MM-dd") 
          .preZone("+05:30") 
          .preZoneAdjustLargeInterval(true) 
          .minDocCount(1)  
         ) 
       .setSize(Integer.MAX_VALUE) 
       .setQuery(query); 

SearchResponse response = srb 
      .setSearchType(SearchType.QUERY_AND_FETCH) 
      .setFetchSource(ConstantsValue.fieldList, null) 
      .execute() 
      .actionGet(); 

但查詢不返回預期結果。顯示

結果如下

Value :{"DTCREATED":"2016-09-29T18:30:00.000Z"} 
Key :AVfdaeSC3n3Bn-RaoFgg 
Value :{"DTCREATED":"2016-09-29T18:30:00.000Z"} 
Key :AVfdaeSC3n3Bn-RaoFgl 
Value :{"DTCREATED":"2016-09-29T18:30:00.000Z"} 
Key :AVfdaeSC3n3Bn-RaoFgq 
Value :{"DTCREATED":"2016-08-31T18:30:00.000Z"} 
Key :AVfdaeSC3n3Bn-RaoFgv 
Value :{"DTCREATED":"2016-09-06T18:30:00.000Z"} 
Key :AVfdaeSC3n3Bn-RaoFg0 
Value :{"DTCREATED":"2016-09-22T18:30:00.000Z"} 
Key :AVfdaeSC3n3Bn-RaoFg5 
Value :{"DTCREATED":"2016-09-22T18:30:00.000Z"} 
Key :AVfdaeSC3n3Bn-RaoFhA 
Value :{"DTCREATED":"2016-09-12T18:30:00.000Z"} 
Key :AVfdaeSC3n3Bn-RaoFhF 

我在elasticsearch新的,不知道我錯過了什麼。 任何幫助,非常感謝!

+0

你的查詢是怎樣的? – Kulasangar

+0

我有查詢SQL ----從tableName中選擇不同的(SSTATUS),計數(SSTATUS),TO_DATE(dtcreated,'DD.MON.YYYY') Where SSTATUS LIKE'CANCELED' group by TO_DATE(dtcreated, 'DD.MON.YYYY'),sstatus order by SSTATUS – Aniket

+0

你是如何在java中查詢它的?你直接在你的代碼中使用SQL查詢? – Kulasangar

回答

1

在ES中沒有groupby類似條款,但是您可以使用Aggregations以按您所需的字段進行分組。例如,我使用下面的帖子http請求來分組,使用userid並獲得每個用戶ID的計數。

搜索查詢應該是這樣的:

http://localhost:9200/response_summary/_search

在上面,response_summary是索引。我正在嘗試做搜索。

請求的主體可以是這樣的:

{ 
    "query":{ 
     "query_string":{ 
     "query":"api:\"smsmessaging\" AND operatorid:\"ROBI\"" 
     } 
    }, 
    "aggs":{ 
     "total":{ 
     "terms":{ 
      "field":"userid" 
     }, 
     "aggs":{ 
      "grades_count":{ 
       "value_count":{ 
        "script":"doc['userid'].value" 
       } 
      } 
     } 
     } 
    } 
} 

所以,你可以提到你aggs標籤內想groupby領域,並獲得數在上述樣本。你可以隨意修改。可以看看this線程。

+0

現在它的工作..謝謝 – Aniket

+0

很高興幫助。 :) – Kulasangar