2016-03-17 11 views
0

Я нахожу функцию в ElasticSearch каккак писать elasticsearch script_score в Java API

GET /_search 
{ 
    "function_score": { 
    "functions": [ 
     { ...location clause... }, 
     { ...price clause... }, 
     { 
     "script_score": { 
      "params": { 
      "threshold": 80, 
      "discount": 0.1, 
      "target": 10 
      }, 
      "script": "price = doc['price'].value; margin = doc['margin'].value; 
      if (price < threshold) { return price * margin/target }; 
      return price * (1 - discount) * margin/target;" 
     } 
     } 
    ] 
    } 
} 
  • я использую ScoreFunctionBuilder для того чтобы достигнуть «Место caluse» и «цена caluse», но я не знаю, как написать "script_score" и "script" по Java API
  • версия ES в моем проекте 2.2.0 и я использую Java API для достижения этой функции
  • Но я не могу найти API, какScriptScoreFunctionBuilder. scriptFunction(String script, Map<String, Object> params), как я могу сделать? Thx :)
  • Наконец я понять, как писать его с помощью JD-Жуй, чтобы проверить файл «elasticsearch.jar».

EX:

Map<String, Object> params = new HashMap<>(); 
    params.put("num1", 10); 
    params.put("num2", 4); 

    String inlineScript = "doc['score'].value * num1 * num2"; 

    Script script = new Script(script, ScriptType.INLINE, "groovy", params); 

    ScriptScoreFunctionBuilder scriptBuilder = ScoreFunctionBuilders.scriptFunction(ss); 

что все

ответ

1

Вот как можно реализовать scrip_ скор-функцию в Java

Map<String, Object> params = new HashMap<>();     
params.put("paramName1", "paramVal1") 
params.put("paramName2", "paramVal2"); 

String script = "price = doc['price'].value; margin = doc['margin'].value; 
     if (price < threshold) { return price * margin/target }; 
     return price * (1 - discount) * margin/target;" 
XContentBuilder builder = 
        new ScriptScoreFunctionBuilder() 
        .script(script) 
        .lang("groovy") 
        .params(params) 
        .toXContent(XContentBuilder, params); 
+0

Пожалуйста, добавьте некоторые подробности о том, почему этот ответ. – Jayan

+0

Большое вам спасибо за помощь, но 'new ScriptScoreFunctionBuilder()' не работает в моем проекте. API должен быть 'new ScriptScoreFunctionBuilder (Script)', он не может быть написан как ваш, только может писать как 'new ScriptScoreFunctionBuilder (скрипт) .toXContent (builder, params)' Я использую неправильный API? Мой английский плохой, извините :( – kevin

+0

Я не могу понять Почему не работает новый ScriptScoreFunctionBuilder()? Нет другого конструктора. Кроме того, вы всегда можете создать новый ScriptScoreFunctionBuilder(). Scrip (SCRIPT) .toXContent (builder, params) – Rahul