直接观察到的几个问题

  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<String, Object> params) {
return new Normal();
} @Override
public boolean needsScores() {
return true;
}
}
}

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

Elasticsearch 排序插件的开发的更多相关文章

  1. MixItUp:超炫!基于 CSS3 & jQuery 的过滤和排序插件

    MixItUp 是一款轻量,但功能强大的 jQuery 插件,提供了对分类和有序内容的美丽的动画过滤和排序功能.特别适合用于作品集网站,画廊,图片博客以及任何的分类或有序内容. 它是如何工作的? Mi ...

  2. Sortable – 简单灵活的 JavaScript 拖放排序插件

    当需要在网站中添加拖放排序功能的时候,jQuery UI 的排序组件可能是最流行的解决方案.今天给大家介绍另一款简单灵活的 JavaScript 拖放排序插件——Sortable,它使用 HTML5 ...

  3. Elasticsearch Head插件实践

    简介 Elasticsearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Ap ...

  4. Elasticsearch入门教程(一):Elasticsearch及插件安装

    原文:Elasticsearch入门教程(一):Elasticsearch及插件安装 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:h ...

  5. chrome浏览器中安装以及使用Elasticsearch head 插件

    一.安装Elasticsearch head 插件 下载安装包:https://github.com/liufengji/es-head/commit/121cdcb6d1b18656461e4889 ...

  6. Android组件化和插件化开发

    http://www.cnblogs.com/android-blogs/p/5703355.html 什么是组件化和插件化? 组件化开发就是将一个app分成多个模块,每个模块都是一个组件(Modul ...

  7. 大熊君JavaScript插件化开发------(第一季)

    一,开篇分析 Hi,大家!大熊君又来了,今天这系列文章主要是说说如何开发基于“JavaScript”的插件式开发,我想很多人对”插件“这个词并不陌生, 有的人可能叫“组件”或“部件”,这不重要,关键是 ...

  8. 使用 WordPress 插件模板开发高质量插件

    WordPress 插件样板是标准化的,有组织的,面向对象的基础,用于构建高品质的 WordPress 插件.样板遵循编码标准和文件标准,所以你不必自己学习这些,根据注释编写代码即可. 官方网站    ...

  9. TinyFrame升级之八:实现简易插件化开发

    本章主要讲解如何为框架新增插件化开发功能. 在.net 4.0中,我们可以在Application开始之前,通过PreApplicationStartMethod方法加载所需要的任何东西.那么今天我们 ...

随机推荐

  1. oracle表空间的创建+权限分配

    /*分为四步 */ /*第1步:创建临时表空间 */ create temporary tablespace user_temp tempfile 'D:\oracle\oradata\Oracle9 ...

  2. IDEA(2018.3.2)

    N757JE0KCT-eyJsaWNlbnNlSWQiOiJONzU3SkUwS0NUIiwibGljZW5zZWVOYW1lIjoid3UgYW5qdW4iLCJhc3NpZ25lZU5hbWUiO ...

  3. 模板——最小生成树prim算法&&向前星理解

    通过最小生成树(prim)和最短路径优化引出的向前星存图,时至今日才彻底明白了.. head[i]存储的是父节点为i引出的最后一条边的编号, next负责把head[i]也就是i作为父节点的所有边连接 ...

  4. chromium之message_pump_win之三

    上一篇分析MessagePumpForUI,参考chromium之message_pump_win之二 MessagePumpForIO,同MessagePumpForUI,也是要实现三个函数 // ...

  5. 第四模块MySQL50题作业,以及由作业引申出来的一些高端玩法

    一.表关系 先参照如下表结构创建7张表格,并创建相关约束                 班级表:class       学生表:student       cid caption grade_id ...

  6. day 16 初试面试对象

    1.初识面向对象      面向过程:             一切以事物的发展流程为中心      面向对象:             一切以对象为中心.一切皆为对象.具体的某一个事务就是对象 打比 ...

  7. 应用性能管理(APM, Application Performance Management)

    当下成熟的互联网公司都建立有从基础设施到应用程序的全方位监控系统,力求及时发现故障进行处理并为优化程序提供性能数据支持,降低整体运维成本.国内外商业的APM有Compuware.iMaster.博睿B ...

  8. 通过devmem访问物理地址

    目录 1.写在前面 2.devmem使用 3.应用层 4.内核层 1.写在前面 最近在调试时需要在用户层访问物理内存,发现应用层可以使用devmem工具访问物理地址.查看源码,实际上是对/dev/me ...

  9. Linux命令集锦

    梳理常用的Linux命令 day1--cd命令 cd命令:(注意以下的命令,cd后均有一个空格) 1.进入盘符: cd f: 2.进入当前目录命令: cd . 3.进入指定文件夹(在进入确定盘符之后, ...

  10. python教程(二)·条件语句

    条件语句一般用来判断给定的条件是否成立,根据结果来执行不同的代码,也就是说,有了条件语句,才可以根据不同的情况做不同的事,从而控制程序的流程. 布尔类型 前面说到数据类型的时候,其中有一种叫 &quo ...