2017-08-30 6 views
3

Comment convertir la requête ES ci-dessous en API Java? J'utilise elasticsearch 2.3.3Comment convertir cette requête de recherche fonctionnelle élastique en API Java

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 
     } 
    } 
} 

Je l'ai déjà essayé d'écrire cette requête ES en utilisant l'API Java en utilisant le lien ci-dessous Elasticsearch FunctionScore query using Java API

Mais le lien ci-dessous semble être une version plus ancienne et ES je suis incapable de trouver ces fonctions statiques dans la recherche élastique 2.3.3.

Répondre

2

parvins comme ci-dessous en utilisant l'API java

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())))); 
       } 
      }