自定义Elasticsearch本地脚本
使用本地代码
实现本地脚本
- 集成抽象类AbstractSearchScript
- 参考代码:123456789101112131415161718public class HashCodeSortScript extends AbstractSearchScript {private String field = "name";public HashCodeSortScript(Map<String,Object> params){if(params!=null && params.containsKey("field")){this.field = params.get("field").toString();}}@Overridepublic Object run() {Object value = source().get(field);if(value!=null){return value.hashCode();}return 0;}}
和其他脚本一样,这里也可以使用source(),doc(),fields()等得到文档内容.
实现脚本工厂
- 实现NativeScriptFactory接口,返回自定义的本地脚本对象
- 参考代码:1234567public class HashCodeSortNativeScriptFactory implements NativeScriptFactory {@Overridepublic ExecutableScript newScript(@Nullable Map<String,Object> params){return new HashCodeSortScript(params);}}
安装脚本
- 编辑打包脚本为jar文档
- 把打包好的jar文档放在Elasticsearch的lib目录
- 注册脚本,两种方法,使用Setting API调用来实现或在elasticsearch.yml配置文件中添加一行,这里我们修改elasticsearch.yml文件,代码如下:12script.native.native_sort.type:pl.solr.elasticsearch.example.scripts.HashCodeSortNativeScriptFactory
注意native_sort部分,这个部分定义了脚本名称,使用时作为参数传递给script部分
- 重启Elasticsearch.
执行脚本示例
|
|
文章参考
- Elasticsearch服务器开发(第二版)