Utiliser ScriptPlugin version ES 5.6

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

D'après la documentation, ça devrait être:

"script_score": {
					"script": {
						"source": "myscoring",
						"lang": "myscoring",
						"params": {
							"nomBasiqueQuery": "test"
						}
					}
				}

Non?

Ou sinon d'après cette doc: essaye juste avec "lang": "java"

https://www.elastic.co/guide/en/elasticsearch/reference/5.6/modules-scripting-engine.html

Oui j'ai vu la doc et j'ai testé avec ces valeurs mais j'ai la même erreur.
Par contre j'ai repris l'exemple entier du scriptEngineService de la doc et là ça marche.
Je vais donc partir de là.

Merci pour la réponse.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.