Как написать эластичный поиск 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);