环境
1、elasticsearch版本:2.3.4
2、java版本 1.8
3、eclipse 4.4.0
4、win7
elasticsearch配置
elasticsearch.yml中追加如下配置:
script.inline: on
script.indexed: on
script.file: on
script.indexed: on
script.file: on
教程
1、开发插件
1.1 eclipse工程目录
1.2 代码
1.2.1 Demoplug.java
package com.es.plugindemo;
import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.script.ScriptModule;
public class Demoplug extends Plugin {
//demoscore就是插件名
private static final String PLUGIN_NAME = "demoscore";
@Override
public String name() {
return PLUGIN_NAME;
}
@Override
public String description() {
return "this is a demo about how to build a script score plugin.";
}
public void onModule(ScriptModule scriptModule) {
scriptModule.registerScript(PLUGIN_NAME, DemoScriptFactory.class);
}
}
1.2.2 DemoScriptFactory.java
package com.es.plugindemo;
import java.util.Map;
import org.elasticsearch.common.Nullable;
import org.elasticsearch.script.ExecutableScript;
import org.elasticsearch.script.NativeScriptFactory;
public class DemoScriptFactory implements NativeScriptFactory {
@Override
public ExecutableScript newScript(@Nullable Map<String, Object> params) {
return new DemoScript(params);
}
@Override
public boolean needsScores() {
return false;
}
}
1.2.3 DemoScript.java
package com.es.plugindemo;
import java.util.Map;
import org.elasticsearch.script.AbstractFloatSearchScript;
public class DemoScript extends AbstractFloatSearchScript {
private int param1;
private int param2;
private String param3;
private String param4;
private int length;
public DemoScript(Map<String, Object> params) {
super();
param1 = (int) params.get("param1");
param2 = (int) params.get("param2");
param3 = (String) params.get("param3");
param4 = (String) params.get("param4");
}
@Override
public float runAsFloat() {
try {
return 666;
} catch (Exception ex) {
ex.printStackTrace();
return -1;
}
}
}
1.2.4 DemoScript.java
引入es、lucenejar包
1.3 打包
按照Eclipse的正常打包,命名为demoscore-1.0.0.jar 即可。
2 安装插件
2.1
将打包文件拷贝至es的plugin文件夹:elasticsearch-2.3.4\plugins\demoscore
编辑plugin-descriptor.properties文件,文件内容如下:
name=demoscore
description=this is a demo about how to build a script score plugin.
version=1.0.0
jvm=true
classname=com.es.plugindemo.Demoplug
java.version=1.8
elasticsearch.version=2.3.4
2.2
文件目录如下:
2.3
重启ES
3 测试
{
"query" : {
"function_score" : {
"query" : {
"term" : {
"_id" : "20170411"
}
},
"functions" : [ {
"script_score" : {
"script" : {
"inline" : "demoscore",
"lang" : "native",
"params" : {
"param3" : "ik_text",
"param4" : "宁波",
"param1" : 2,
"param2" : 6
}
}
}
} ]
}
}
}
"query" : {
"function_score" : {
"query" : {
"term" : {
"_id" : "20170411"
}
},
"functions" : [ {
"script_score" : {
"script" : {
"inline" : "demoscore",
"lang" : "native",
"params" : {
"param3" : "ik_text",
"param4" : "宁波",
"param1" : 2,
"param2" : 6
}
}
}
} ]
}
}
}