Как написать эластичный поиск script_score в Java API

Я нахожу функцию в ElasticSearch, как

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" Ява Апи
  • Версия ES в моем проекте - 2.2.0, и я использую Java API для достижения этой функции
  • Но я не могу найти API, как ScriptScoreFunctionBuilder. scriptFunction(String script, Map<String, Object> params) как я могу сделать? Thx:)
  • Наконец, я выясняю, как написать его, используя JD-JUI для проверки файла "asticsearch.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_ Score в 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);
Другие вопросы по тегам