2016-04-13 15 views
0

Java API'lerini kullanarak aşağıdaki function_score sorgusunu kullanmam gerekir. Ben buJava API kullanarak Elasticsearch FunctionScore sorgusu nasıl kullanılır

RangeQueryBuilder queryStartDate = QueryBuilders.rangeQuery("startTime").gte(param.getStartTime()) 
       .lte(param.getEndTime()); 

     RangeQueryBuilder queryEndDate = QueryBuilders.rangeQuery("endTime").gte(param.getStartTime()) 
       .lte(param.getEndTime()); 

// query 
QueryBuilder querys = QueryBuilders.boolQuery().must(queryStartDate).must(queryEndDate); 

// function 
Map<String, Double> locationMap = new HashMap<String, Double>(); 
     locationMap.put("lat", param.getLat()); 
     locationMap.put("lon", param.getLng()); 
     ScoreFunctionBuilder sfb2 = ScoreFunctionBuilders.gaussDecayFunction("location", locationMap, "1km") 
       .setOffset("2km"); 

//function_score 
FunctionScoreQueryBuilder sa = new FunctionScoreQueryBuilder().boostMode("replace").add(sfb2); 

//final search 
SearchResponse response = client.prepareSearch().setIndices("film").setTypes("data").setQuery(sa) 
       .setQuery(querys).setSize(40).execute().actionGet(); 

gibi Java API kullanmak elasticsearch

{ 
    "size": 40, 
    "query": { 
    "function_score": { 
     "functions": [ 
     { 
      "gauss": { 
      "location": { 
       "origin": { 
       "lat": 39.99606, 
       "lon": 116.480484 
       }, 
       "offset": "2km", 
       "scale": "3km" 
      } 
      } 
     } 
     ], 
     "score_mode": "sum", 
     "boost_mode": "replace", 
     "query": { 
     "bool": { 
      "must": [ 
      { 
       "range": { 
       "startTime": { 
        "from": "2016-04-12T12:00:00.000Z", 
        "to": "2016-04-12T16:00:00.000Z", 
        "include_lower": true, 
        "include_upper": true 
       } 
       } 
      }, 
      { 
       "range": { 
       "endTime": { 
        "from": "2016-04-12T12:00:00.000Z", 
        "to": "2016-04-12T16:00:00.000Z", 
        "include_lower": true, 
        "include_upper": true 
       } 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

Java API bölümünde function_score sorgu için herhangi bir resmi belgelerine bulamadı ama

cevap

2

İhtiyacınız işe doz değil Sorunuzu FunctionScoreQueryBuilder ürününüzde aşağıdaki gibi eklemek için:

FunctionScoreQueryBuilder fqBuilder = QueryBuilders.functionScoreQuery(querys); 
    fqBuilder.boostMode(CombineFunction.REPLACE); 
    fqBuilder.scoreMode(ScoreMode.Sum.name().toLowerCase()); 
    fqBuilder.add(sfb2); 
    SearchResponse response = client.prepareSearch().setIndices("film").setTypes("data").setQuery(fqBuilder).setSize(40).execute().actionGet(); 
+0

Bana yardım ettiğin için çok teşekkür ederim, işe yarıyor ve elasticsearch java-api belgelerini nasıl bulacağımı bilmek istiyorum. CombineFunction.REPLACE gibi resmi belgeleri bulamıyorum, const parametresini bile bilmiyorum ... – kevin

+0

Sadece api belgesine bakarsanız kolayca bulabilirsiniz. Sadece sınıfa bakın ve imza ile bir api bulacaksınız: public FunctionScoreQueryBuilder boostMode (CombineFunction combineFunction) – Rahul

İlgili konular