2017-11-27 22 views
0

私はElasticsearchを初めて使い、高レベルレストクライアントを使用して日付範囲の集計を実行しています。これは私がしようとしている方法ですElasticsearchで集計を実行することができません

::私は、コードを実行すると、クエリが正常に実行されますが、返されたオブジェクトは、集計値としてnullを持っています

AggregationBuilder aggregation = 
    AggregationBuilders 
     .dateRange("agg") 
     .field("date_created") 
     .format("MM") 
     .addRange(11, 12) // from 11 to 12 (excluded) 

SearchRequest searchRequest = new SearchRequest("index_name"); 
searchRequest.types(Long.toString(1234)); 
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); 
searchSourceBuilder 
     .query(QueryBuilders.matchAllQuery()) 
     .aggregation(aggregation); 

SearchResponse searchResponse = this.client.search(searchRequest); 

searchResponseオブジェクトがnull値として集計しています。

しかし、私はKibanaで集計クエリを実行すると、これは私が何を得る

POST /index_name/1234/_search?size=0 
{ 
    "aggs": { 
     "range": { 
      "date_range": { 
       "field": "date_created", 
       "format": "MM", 
       "ranges": [ 
        { "from": "now-0M/M" } 
       ] 
      } 
     } 
    } 
} 

出力されます。

{ 
    "took": 1, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 5, 
    "skipped": 0, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 2, 
    "max_score": 0, 
    "hits": [] 
    }, 
    "aggregations": { 
    "range": { 
     "buckets": [ 
     { 
      "key": "11-*", 
      "from": 1509494400000, 
      "from_as_string": "11", 
      "doc_count": 2 
     } 
     ] 
    } 
    } 
} 

は、いくつかのこの上で私を助けてくださいことはできますか?私は非常に長い間固まっています。

要求ごとのように、サンプルデータを追加:

"hits": [ 
     { 
     "_index": "index_name", 
     "_type": "1234", 
     "_id": "AV__ZmN6KNpjod2Y_7PE", 
     "_score": 1, 
     "_source": { 
      "category": 1234, 
      "i_id": 87665, 
      "v_Id": 12, 
      "date_created": "2017-11-27T14:33:38.954Z" 
     } 
     }, 
     { 
     "_index": "index_name", 
     "_type": "1234", 
     "_id": "AV_-XzlpzSX1UeitwVjd", 
     "_score": 1, 
     "_source": { 
      "category": 1234, 
      "i_id": 8766, 
      "v_Id": 2, 
      "date_created": "2017-11-27T09:46:00.095Z" 
     } 
     } 
    ] 

感謝を!

+0

をあなたは、あなたのJavaコードでとKibanaで同じ日付フィールドを使用していない上記のクエリ – swap0129

+0

のサンプルデータを提供することができます。 – Val

+0

@Val実際のコードでは、どちらの場合も同じフィールドを使用しています。私はKibanaのクエリを更新しました。 –

答えて

0

最後に、私の問題の答えが見つかりました。集約オブジェクトを作成したら、それを手動でSearchRequestに設定する必要があります。

AggregationBuilder aggregation = 
    AggregationBuilders 
     .dateRange("agg") 
     .field("date_created") 
     .format("yyyy-MM") 
     .addRange("2017-11", "2017-12") // from 11 to 12 (excluded) 

SearchRequest searchRequest = new SearchRequest("index_name"); 
searchRequest.types(Long.toString(1234)); 
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); 
searchSourceBuilder 
     .aggregation(aggregation); 
コードを修正する

追加しましたライン:

関連する問題