2016-07-11 7 views
0

私はセンスを使って作成したこのクエリを持っています。私はそれをJavaに変換する方法を頭に壊しています。 私はaggsの一部を管理することができ、本当の痛みは「constant_score」ElasticSearch - Javaでクエリを作成する

GET /xxxx/yyyy/_search 
{ 
    "size": 0, 
    "query" : { 
     "constant_score" : { 
     "filter" : { 
      "bool" : { 
       "must" : [ 
       { "term" : {"userId" : 275}}, 
       { "range" :{"logDate" : { "gte" : "2016-04-30", "lte" : "now/d" }}} 
       ] 
      } 
     } 
     } 
    }, 
    "aggs" : { 
     "datebucket" : { 
      "date_histogram" : { 
       "field" : "logDate", 
       "interval": "day", 
       "format": "yyyy-MM-dd", 
       "min_doc_count": 0 
      }, 
      "aggs": { 
       "info": { 
       "filters": { 
        "filters" : [ 
        {"term": { "logAction": "sleep" }}, 
        {"term": { "logAction": "stop" }} 
        ] 
       } 
       } 
      } 
     } 
    } 
} 

である私は、私はよくこの

SearchResponse res = client.prepareSearch("xxxx").setTypes("yyyy") 
            .setSize(0)          
            .setQuery(QueryBuilders.termQuery("userId", 95)) 
            .addAggregation(
              AggregationBuilders.dateHistogram("date_histogram") 
              .field("logDate") 
              .interval(DateHistogramInterval.DAY) 
              .format("yyyy-MM-dd") 
              .minDocCount(0) 
              ).execute().get(); 

答えて

0

のようにそれを行うために管理し、より単純なクエリを持っていた、私は解決策を見つけました。これが誰かを助けることを願っています

 String query = "{\"constant_score\" : " 
         + "{ \"filter\" : " 
          + "{\"bool\" : " 
           + "{\"must\" : " 
             + "[{ \"term\" : {\"userId\" : " + userID + "}}, " 
             + "{ \"range\" :{\"logDate\" : { \"gte\" : \"" + startdate + "\", \"lte\" : \"" + enddate + "\" }}}]" 
            + "}" 
           + "}" 
          + "}" 
         + "}"; 

     SearchResponse res = client.prepareSearch(xxxx).setTypes(yyyy)     
       .setQuery(query).addAggregation(
         AggregationBuilders.dateHistogram("date_histogram") 
         .field("logDate") 
         .interval(DateHistogramInterval.DAY) 
         .format("dd-MM-yyyy") 
         .minDocCount(0) 
          .subAggregation(AggregationBuilders.filters("info") 
            .filter(QueryBuilders.termQuery("logAction", "click")) 
            .filter(QueryBuilders.termQuery("logAction", "view"))) 
         ).setSize(0).execute().get(); 
関連する問題