博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Elasticsearch 排序插件的开发
阅读量:7098 次
发布时间:2019-06-28

本文共 1764 字,大约阅读时间需要 5 分钟。

直接观察到的几个问题

  1. 简单expression脚本的执行效率 > java 插件,10000条数据可以测试出1ms左右的差距。
  2. Es会不断调用newScript来创建“足够多”的自定义脚本对象,来处理,不管数据量多还是少,应该有个初始值。所以本地有时候只有几条测试数据,它也会创建几十个自定义脚本对象,并不奇怪,这个我纠结了比较久,以为是代码有问题。

数值类型问题

官方有个demo,那个在java8 + es2.0 跑不起来的,主要问题就是这个数值类型。

从source().get()得到的数据,和上传数据的时候json对象数据有关,而(float)强制转换可能失败。从doc().getValues()得到的数据有点不太一样,如果你设定float类型,会得到一个double类型。。。而不是float。尽量从doc()去取值,它会保证给的值是同一种。据说效率也好点。

//插件执行的脚本package ******;import org.elasticsearch.script.AbstractDoubleSearchScript;import org.elasticsearch.index.fielddata.ScriptDocValues;public class Normal extends AbstractDoubleSearchScript {    //"1 /( now - doc['dateline'] > 259200 ? ( now - doc['dateline'] ) / 259200 : 1)",    @Override    public double runAsDouble() {        return ((ScriptDocValues.Doubles) doc().get("a")).getValue() / 123456;    }}//工厂类package ***;import org.elasticsearch.common.Nullable;import org.elasticsearch.plugins.Plugin;import org.elasticsearch.script.*;import java.util.Map;import java.util.Timer;import java.util.TimerTask;public class myPlugins extends Plugin {    @Override    public String name() {        return "my_normal";    }    @Override    public String description() {        return "my native script that does something great";    }    public void onModule(ScriptModule scriptModule) {        scriptModule.registerScript("my_normal", MyNativeScriptFactory.class);    }    public static class MyNativeScriptFactory implements NativeScriptFactory {        @Override        public ExecutableScript newScript(@Nullable Map
params) { return new Normal(); } @Override public boolean needsScores() { return true; } }}

就上面这个脚本,执行速度赶不上 expression:'doc['a'] / 123456'

转载于:https://www.cnblogs.com/didda/p/5040046.html

你可能感兴趣的文章
[JavaScript] Imitate String.Format() in c#
查看>>
wxstring与其他类型转换
查看>>
Java synchronized详解
查看>>
Frameset使用教程
查看>>
局域网与internet
查看>>
request
查看>>
Beyond Compare乱码问题汇总
查看>>
线程和线程池
查看>>
Camstar开发常用数据库表及其关联
查看>>
html中的一些按钮之类的操作
查看>>
走进 AQS 瞧一瞧看一看
查看>>
NO18 linux开机自启动设置--开机流程--中文乱码--查看行数
查看>>
Java的四种内部类
查看>>
10-16C#for...循环语句(2)
查看>>
CentOS查看软件源提供的软件版本命令
查看>>
caffe 学习记录1及网络结构
查看>>
html5学习笔记——html新增属性(四)
查看>>
收藏的链接
查看>>
【原创】5月份月会总结
查看>>
手机号码归属地查询
查看>>