直接观察到的几个问题

  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. duplicate symbols for architecture arm64 导入的类库字符重复

    这个错误大部分时候是引用库重复定义的问题. 项目需要,同时引用ZBar和QQ授权登录SDK,由于二者均使用了Base64处理数据,XCode编译时报错: duplicate symbol _base6 ...

  2. Grub4dos boot

    Grub4dos 0.4.6a http://grub4dos.chenall.net/ Ghost11.5 bcdedit bcdedit /create /d "Grub4dos&quo ...

  3. C++ Primer 第8章作业

    练习8.1 编写函数,接受一个istream&参数,返回值类型也是istream&. 此函数须从给定流中读取数据,直至遇到文件结束标识时停止.它将读取的数据打印在标准输出上.完成这些操 ...

  4. 08.nextcloud搭建

    由于公司用的nfs文件共享系统满足不了权限需求,测试nextcloud是否符合要求 参考博客: https://www.cnblogs.com/davidz/articles/9686716.html ...

  5. 搭建Apache服务器并使用自签证书实现https访问

    实验环境:两台Centos7.2的虚拟机,一台作CA服务器,一台作Apache服务器,此处安装httpd-2.4.6的版本. 1)CA服务器 # 私钥一般存放位置:/etc/pki/CA/privat ...

  6. jQuery DOM/属性/CSS操作

    jQuery DOM 操作 创建元素 只需要把DOM字符串传入$方法即可返回一个 jQuery 对象 var obj = $('<div class="test">&l ...

  7. 为什么后台返回的日期我输出处理了在苹果手机里显示NAN?

      现象:   //结束时间var ent_time ="2018-04-28 09:36:00"alert((Date.parse(new Date(ent_time))));/ ...

  8. Asp.Net Core链接Mysql数据库

    一.新建一个Asp.Net Core WebMVC程序 添加nuget包  Mysql.Data 二.新建一个UserContext类 下面代码中的UserInfo是我自己建的一个实体,里面有俩字段: ...

  9. flask第三方插件WTForms

    在django中有ModelForm, 虽然flask原生没有提供, 但是强大的第三方也提供了这样的功能 虽然不如django的强大, 但是基本的功能还是可以有的, 下面就来使用一哈. WTForms ...

  10. go字符串操作

    在Go语言标准库中的strings和strconv两个包可以对字符串做快速处理 string包 func Contains(s, substr string) bool 字符串s中是否包含substr ...