Bonjour
J'ai un probleme pour appeler mon plugin suite à une migration de elasticSearch de 5.4 à 5.6 .
Au sein du projet j'ai un plugin de custom de script. Je suis passé par un ScriptEngineService
public class MyScorePlugin extends Plugin implements ScriptPlugin {
@Override
public ScriptEngineService getScriptEngineService(Settings settings) {
return new MyScriptEngine();
}
}
public class MyScriptEngine implements ScriptEngineService {
public static final String NAME = "myscoring";
@Override
public void close() throws IOException {
}
@Override
public String getType() {
return NAME;
}
@Override
public String getExtension() {
return NAME;
}
@Override
public Object compile(String scriptName, String scriptSource, Map<String, String> params) {
return scriptSource;
}
@Override
public ExecutableScript executable(CompiledScript compiledScript, Map<String, Object> params) {
throw new UnsupportedOperationException();
}
@Override
public SearchScript search(CompiledScript compiledScript, SearchLookup lookup, Map<String, Object> vars) {
final String nomBasiqueQuery;
if (vars == null || vars.containsKey("nomBasiqueQuery") == false) {
nomBasiqueQuery = null;
} else {
nomBasiqueQuery = (String) vars.get("nomBasiqueQuery");
}
return new SearchScript() {
private Map<String, Object> vars = new HashMap<>(2);
@Override
public LeafSearchScript getLeafSearchScript(LeafReaderContext context) throws IOException {
final LeafSearchLookup leafLookup = lookup.getLeafSearchLookup(context);
return new LeafSearchScript() {
@Override
public void setNextVar(String name, Object value) {
vars.put(name, value);
}
@Override
public Object run() {
throw new UnsupportedOperationException();
}
@Override
public void setScorer(Scorer scorer) {
}
@Override
public void setSource(Map<String, Object> source) {
}
@Override
public void setDocument(int doc) {
if (leafLookup != null) {
leafLookup.setDocument(doc);
}
}
@Override
public long runAsLong() {
return 2;
}
@Override
public double runAsDouble() {
if (nomBasiqueQuery != null)
return 1;
else
return 0;
}
};
}
@Override
public boolean needsScores() {
return false;
}
};
}
@Override
public boolean isInlineScriptEnabled() {
return true;
}
}
Tout ça est compilé dans un jar que je mets dans le repertoire plugin de l'install elasticsearch.
Pour l'utilisation :
"script_score": {
"script": {
"inline": "myscoring",
"lang": "native",
"params": {
"nomBasiqueQuery": "test"
}
}
}
J'ai l'erreur : "reason": "Failed to compile inline script [myscoring] using lang [native]"
Savez vous comment utiliser et appeler le plugin ?
Merci