I have used @ndtreviv's answer as a starting point. Here are my notes for ElasticSearch 2.3.3:
es-plugin.properties file is now called plugin-descriptor.properties
You do not reference NativeScriptFactory in elasticsearch.yml, instead you create an additional class next to your HammingDistanceScript.
import org.elasticsearch.common.Nullable;
import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.script.ExecutableScript;
import org.elasticsearch.script.NativeScriptFactory;
import org.elasticsearch.script.ScriptModule;
import java.util.Map;
public class StringMetricsPlugin extends Plugin {
@Override
public String name() {
return "string-metrics";
}
@Override
public String description() {
return "";
}
public void onModule(ScriptModule module) {
module.registerScript("hamming-distance", HammingDistanceScriptFactory.class);
}
public static class HammingDistanceScriptFactory implements NativeScriptFactory {
@Override
public ExecutableScript newScript(@Nullable Map params) {
return new HammingDistanceScript(params);
}
@Override
public boolean needsScores() {
return false;
}
}
}
plugin-descriptor.properties file:plugin=com.example.elasticsearch.plugins. StringMetricsPlugin
name=string-metrics
version=0.1.0
jvm=true
classname=com.example.elasticsearch.plugins.StringMetricsPlugin
java.version=1.8
elasticsearch.version=2.3.3
module.registerScript("hamming-distance", HammingDistanceScriptFactory.class); in 2.Hope this helps the next poor soul that has to deal with the shitty ES docs.