2017-08-30 14 views
3

以下のESクエリをJava APIに変換するにはどうすればよいですか?私は、私はすでに、これはクエリ Elasticsearch FunctionScore query using Java APIこの弾性検索機能スコアクエリをJava APIに変換する方法

下のリンクを使用してJava APIを使用してES書くことを試みた。しかし、下記のリンクは、古いESバージョンのように思わ2.3.3

GET /schema_name/_search 
{ 
"from": 0, 
"size": 200, 
"query": { 
    "function_score": { 
     "query": { 
      "match_all": {} 
     }, 
     "boost": "5", 
     "functions": [{ 
       "filter": { 
        "term": { 
         "alert_code": "event_rule_1" 
        } 
       }, 
       "weight": 50 
      }, 
      { 
       "filter": { 
        "term": { 
         "alert_code": "event_rule_2" 
        } 
       }, 
       "weight": 30 
      }, 
      { 
       "filter": { 
        "term": { 
         "alert_code": "event_rule_3" 
        } 
       }, 
       "weight": 10 
      }, 
      { 
       "filter": { 
        "term": { 
         "alert_code": "event_rule_4" 
        } 
       }, 
       "weight": 10 
      }, 
      { 
       "filter": { 
        "term": { 
         "alert_code": "event_rule_5" 
        } 
       }, 
       "weight": 50 
      }, 
      { 
       "filter": { 
        "term": { 
         "alert_code": "event_rule_6" 
        } 
       }, 
       "weight": 50 
      } 
     ], 
     "max_boost": 50, 
     "score_mode": "max", 
     "boost_mode": "replace", 
     "min_score": 0 
     } 
    } 
} 

弾性検索を使用していますし、私は弾性検索でこれらの静的関数を見つけることができません2.3.3。

答えて

2

は、Java API

FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders 
        .functionScoreQuery(queryBuilder) 
        .setMinScore(0f) 
        .maxBoost(50f) 
        .scoreMode("max") 
        .boostMode(CombineFunction.REPLACE); 

      for (String alertCode : ruleCodesLowerCase) { 
       if(alertPriorityMap.get(alertCode.toUpperCase()) != null){ 
        functionScoreQueryBuilder.add(QueryBuilders.termQuery(AlertESEnum.ALERT_CODE_FIELD.value(), 
          alertCode), ScoreFunctionBuilders.weightFactorFunction((AlertPriority.intValue(alertPriorityMap.get(alertCode.toUpperCase()).getPriority())))); 
       } 
      } 
を使用して以下のようにそれを達成します