Elasticsearch5.5.1 自定义评分插件开发
文本相似度插件开发,本文基于Elasticsearch5.5.1,Kibana5.5.1
下载地址为:
Past Releases of Elastic Stack Software | Elastic
本地启动两个服务后,localhost:5601打开Kibana界面,点击devTools,效果图
创建索引 PUT index
添加数据 GET index/doc_1,json
{
"title":"11111",
"feature":"搭建好ES之后,想用命令行简单测试一下,涉及到了下面几个命令,也遇到了一些问题,记录一下"
}
查询语句 GET index/doc_1/_search 必须有_search,不然就变插入或更新了
{"from": 0,"size": 15,"min_score": 0.3,"query": {"function_score": {"functions": [{"script_score": {"script": {"inline": "icon_hash","lang": "native","params": {"feature": "想"}}}}]}}
}
记录一下插件的写法:
1.相似度比较算法,pom
<dependency><groupId>com.janeluo</groupId><artifactId>ikanalyzer</artifactId><version>2012_u6</version>
</dependency>
算法代码:
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;import java.io.IOException;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Vector;
public class TextComparator {public static double YUZHI = 0.1;public TextComparator() {}public static double getSimilarity(Vector<String> T1, Vector<String> T2) throws Exception {if (T1 != null &&T1.size() > 0 && T2 != null && T2.size() > 0) {Map<String, double[]> T = new HashMap();String index = null;int i;double[] c;for(i = 0; i < T1.size(); ++i) {index = (String)T1.get(i);if (index != null) {c = (double[])T.get(index);c = new double[]{1.0, YUZHI};T.put(index, c);}}for(i = 0; i < T2.size(); ++i) {index = (String)T2.get(i);if (index != null) {c = (double[])T.get(index);if (c != null && c.length == 2) {c[1] = 1.0;} else {c = new double[]{YUZHI, 1.0};T.put(index, c);}}}Iterator<String> it = T.keySet().iterator();double s1 = 0.0;double s2 = 0.0;double Ssum;for(Ssum = 0.0; it.hasNext(); s2 += c[1] * c[1]) {c = (double[])T.get(it.next());Ssum += c[0] * c[1];s1 += c[0] * c[0];}return Ssum / Math.sqrt(s1 * s2);} else {throw new Exception("传入参数有问题!");}}public static Vector<String> participle(String str) {Vector<String> str1 = new Vector();try {StringReader reader = new StringReader(str);IKSegmenter ik = new IKSegmenter(reader, true);Lexeme lexeme = null;while((lexeme = ik.next()) != null) {str1.add(lexeme.getLexemeText());}if (str1.size() == 0) {return null;}System.out.println("str分词后:" + str1);} catch (IOException var5) {System.out.println();}return str1;}public static void main(String[] args) {String s1 = "想";String s2 = "搭建好ES之后,想用命令行简单测试一下,涉及到了下面几个命令,也遇到了一些问题,记录一下";Double score;try {score = getSimilarity(participle(s1), participle(s2));} catch (Exception var5) {throw new RuntimeException(var5);}System.out.println(score);}public static Double getScore(String s1, String s2) {try {return getSimilarity(participle(s1), participle(s2));} catch (Exception var3) {throw new RuntimeException(var3);}}
}
Elasticsearch插件代码
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.common.Nullable;
import org.elasticsearch.common.xcontent.support.XContentMapValues;
import org.elasticsearch.plugins.ActionPlugin;
import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.plugins.ScriptPlugin;
import org.elasticsearch.script.AbstractDoubleSearchScript;
import org.elasticsearch.script.ExecutableScript;
import org.elasticsearch.script.NativeScriptFactory;import java.util.Collections;
import java.util.List;
import java.util.Map;public class IconHashPlugin extends Plugin implements ActionPlugin, ScriptPlugin {private final static Logger LOGGER = LogManager.getLogger(IconHashPlugin.class);public IconHashPlugin() {super();LOGGER.warn("Create the Basic Plugin and installed it into elasticsearch");}@Overridepublic List<NativeScriptFactory> getNativeScripts() {return Collections.singletonList(new MyNativeScriptFactory());}public static class MyNativeScriptFactory implements NativeScriptFactory {private final static Logger LOGGER = LogManager.getLogger(MyNativeScriptFactory.class);@Overridepublic ExecutableScript newScript(@Nullable Map<String, Object> params) {LOGGER.info("MyNativeScriptFactory run new Script ");String featureStr = params == null ? null : XContentMapValues.nodeStringValue(params.get("feature"), null);if (featureStr == null) {LOGGER.error("Missing the field parameter ");}return new MyScript(featureStr);}@Overridepublic boolean needsScores() {return false;}@Overridepublic String getName() {return "icon_hash";}}public static class MyScript extends AbstractDoubleSearchScript {private final static Logger LOGGER = LogManager.getLogger(MyScript.class);private final String featureStr;public MyScript(String featureStr) {this.featureStr = featureStr;}@Overridepublic double runAsDouble() {LOGGER.info("my run As begining ");String strSrcFeature = (String) source().get("feature");String f1 = featureStr;String f2 = strSrcFeature;LOGGER.info("featureStr------> "+featureStr);LOGGER.info("strSrcFeature------> "+strSrcFeature);Double score = MyTextComparator.getScore(featureStr,strSrcFeature);LOGGER.info("score------> "+score);return score;}}
}
2.部署插件
打包啥的见我的另一个代码源码:
https://download.csdn.net/download/airyearth/87435594
本次主要就是替换了算法
3.部署插件,非常重要的一点就是把一些冲突的jar包删掉,copy进Elasticsearch的\elasticsearch-5.5.1\plugins后,手动删掉lucene所有的包,不然会和es冲突
重启es就可以了
相关文章:
Elasticsearch5.5.1 自定义评分插件开发
文本相似度插件开发,本文基于Elasticsearch5.5.1,Kibana5.5.1 下载地址为: Past Releases of Elastic Stack Software | Elastic 本地启动两个服务后,localhost:5601打开Kibana界面,点击devTools,效果图…...
4.4 序列化与反序列化
文章目录1.概述2.特点/应用场景3.涉及到的流对象4.代码实现序列化与反序列化4.1 步骤1:创建学生类Student24.2 步骤2:创建序列化测试类5.测试案例中常见的几种编译错误类型6.为什么反序列化版本号需要与序列化版本号一致?7.自动提示 生成UID …...
647. 回文子串 516. 最长回文子序列
647. 回文子串 方法一:动态规划 dp[i][j]:[i,j]范围的下标字符串s是否为回文子串 遍历字符串,每次判断s[i]与s[j]是否相等 ①若相等,j-i0 即单个字符串s[i],那么一定为回文子串,赋值为1 ②若相等,j-i1…...
实用小妙招
记录一些实用小妙招,都是收藏夹里收藏的各种文章,总结在一起,持续更新 实用小妙招LinuxUbuntu修改终端语言安装 Node.js (nvm)git 记住账号密码WSL迁移默认用户修改Linux Ubuntu 修改终端语言 apt update apt install -y language-pack-zh…...
别让猴子跳回背上
1.管理者的贡献来自于他们的判断力与影响力,而非他们所投入的个人时间与埋头苦干 2.管理者的绩效表现则是许多人群策群力的结果 3.管理者的时间管理: 老板占用的时间;组织占用的时间;自己占用的时间;外界占用的时间; 4.管理者的策略在于增加自己的时间,…...
数据结构 | 线性表
🔥Go for it!🔥 📝个人主页:按键难防 📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 📖系列专栏:数据结构与算法 ὒ…...
Deepwalk深度游走算法
主要思想 Deepwalk是一种将随机游走和word2vec两种算法相结合的图结构数据的挖掘算法。该算法可以学习网络的隐藏信息,能够将图中的节点表示为一个包含潜在信息的向量, Deepwalk算法 该算法主要分为随机游走和生成表示向量两个部分,首先…...
微服务项目【服务调用分布式session共享】
nginx动静分离 第1步:通过SwitchHosts新增二级域名:images.zmall.com 第2步:将本次项目的所有静态资源js/css/images复制到nginx中的html目录下 第3步:在nginx的核心配置文件nginx.conf中新增二级域名images.zmall.com访问映射…...
神经网络的万能逼近定理
这是我见过的讨论神经网络万有逼近问题的最好的文章。在文章中,给出了最清晰,简洁的构造性证明。揭示了它的本质。 三十年前,我们接触到神经网络的万有逼近问题。发表了几篇文章。这些文章把神经网络能力的来历、优点、缺点,都已…...
【信息系统项目管理师】项目管理过程的三万字大论文
【信息系统项目管理师】项目管理过程的三万字大论文 【信息系统项目管理师】项目管理过程的三万字大论文 【信息系统项目管理师】项目管理过程的三万字大论文1.制定项目章程2.识别干系人3.制定范围管理计划4.制定进度管理计划5.制定成本管理计划6.制定质量管理计划7.编制人力资…...
【C++】C++11 ~ 包装器解析
🌈欢迎来到C专栏~~包装器解析 (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort目前状态:大三非科班啃C中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞!送给自己的一句鸡汤&a…...
SpringBoot整合(三)SpringBoot发送邮件
使用SpringBoot发送邮件 邮件发送其实是一个非常常见的需求,用户注册,找回密码等地方,都会用到,Spring Boot 中对于邮件发送,提供了相关的自动化配置类,使得邮件发送变得非常容易。 1、前置工作 目前国内…...
【docker知识】联合文件系统(unionFS)原理
一、说明 Docker CLI 操作起来比较简单——您只需掌握Create、Run、InspPull和Push容器和图像,但是谁想过Docker 背后的内部机制是如何工作的?在这个简单的表象背后隐藏着许多很酷的技术, UnionFS(统一文件系统)就是其…...
使用Lame库实现wav、pcm转mp3
文章目录 前言 一、Lame库是什么? 二、使用步骤 0.创建native项目 1.下载Lame库 2.pcm转MP3 3.wav转MP3 4、native方法如下 三、注意 总结 前言 因为使用android录音后生成的文件是wav或者pcm格式,项目要求最后的文件需要是mp3格式,于…...
c++11 标准模板(STL)(std::multimap)(三)
定义于头文件 <map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class multimap;(1)namespace pmr { template <class Key, class T…...
【报复性赚钱】2023年5大风口行业
今天就来和大家分享一下,在时代的洪流下,普通人如何顺应大势抓住机遇! 实现人在风口上,猪都会飞起来。 根据对市场的观察及各平台数据分析结果,结合国家政策和经济专家的分析,小编预测了2023年将会迎来大…...
单目相机、双目相机和RGB-D相机学习笔记(一些视频和博文网址)
目录1. 单目相机1.1 摄像头原理1.2 单目相机的标定2 双目相机2.1 双目相机定位原理2.2 双目相机的缺陷3 RGB-D相机3.1 深度相机结构光原理3.2 RGB-D相机的应用1. 单目相机 1.1 摄像头原理 视频网址:【全网最详细】摄像头原理分析(约25分钟课程…...
word和wps添加mathtype选项卡
word或wps添加mathtype选项卡 前提 安装好word或wps安装好mathtype 步骤 确认word或wps具体安装位置确认word或wps位数为32位还是64位复制mathtype中的MathPage.wll文件和MathType Commands 2016.dotm文件到STARTUP位置添加受信任位置添加加载项 安装位置 通过开始页面&a…...
获取成员userID
文章目录一、简介二、获取token1、获取秘钥2、获取Token三、获取部门数据1、获取部门列表2、获取子部门ID列表3、获取单个部门详情四、获取成员信息1、读取成员2、获取部门成员3、获取部门成员详情一、简介 同步数据到企微: 企业如果需要从自有的系统同步通讯录到…...
DOM编程-显示网页时钟
<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>显示网页时钟</title> </head> <body bgcolor"antiquewhite"> <script type"text/javascrip…...
浅谈保护数据的加密策略
加密是一种将信息从可读格式转换为混乱字符串的技术。这样做可以防止数据传输中的机密数据泄露。文档、文件、消息和所有其他形式的网络通信都可以加密。加密策略和身份验证服务的结合,还能保障企业机密信息只对授权用户开启访问权限。常见的数据加密包括以下两种&a…...
Java中String,StringBuffer和StringBuilder
String类 我们在定义string变量时 常常写 String str "hello word"; 这样的代码,看起来和int a 0; 是一样的声明方式, 但其实两者是不同的, int 是java中定义的基本数据类型, 而String是一个类,是一个特殊的类,可以像基本数据类型一样直接赋…...
华为认证常见技术问答整理:什么是Datacom认证?
一、关于Datacom认证Q:什么是Datacom认证?A:Datacom,即DatacomCommunication的缩写,中文为“数据通信”,属于ICT技术架构认证类别(华为认证包含ICT技术架构认证、平台与服务认证和行业ICT认证三…...
Read book Netty in action (Chapter II) (Netty Introduction)
前言 支持15W的并发客户端,我们应该视为理所当然的事情,很多公司甚至能够支撑更多,例如我们熟知的 BAT,当几年前双十一的夜晚,并发量是不可估计的。还有春节的时候购票的时候的并发。作为一个优秀的开发人员ÿ…...
python--route
routes是用python重新实现的Rails routes系统,用于将url映射到应用程序的actions ,并反过来生成url 它也是在openstack实现restful通信的方式,它被用来做将 URL 映射为 App 的 action,以及为 App的action 产生 URL 两个重要的方法…...
java面试中被问到项目中的难点,怎么回答
java面试中被问到项目中的难点,怎么回答回答步骤举例说明回答步骤 回答这个问题的方法取决于你的项目的类型和难度。 但是,一般来说,你可以遵循以下步骤来回答这个问题: 描述你的项目:首先简要描述你的项目的类型和目…...
【速通版】吴恩达机器学习笔记Part1
准备速通一下吴恩达的机器学习 很快做个笔记5.2.3 监督学习 part 2_哔哩哔哩_bilibili 目录 1.概述(P1-P3) 2.supervised learning:(P4,P5) regression: classification 3.unsupervised learning (P6- 1.聚类算…...
面试(九)小米C++开发一面 21.11.02
1、局部变量与全局变量的区别?可以同名嘛? 首先是作用域: 局部变量只在变量声明的代码块范围内生效 全局变量在其声明后的所有位置都能访问到 在局部变量与全局变量同名的情况下,全局变量会被屏蔽掉,只会使用局部变量的内容 2、extern 当在a.c中想要使用b.c中的函数fu…...
儿童书写台灯哪个牌子比较好?2023儿童护眼台灯分享
现在儿童的近视率高达52.7%,有科技水平的提高和电子产品的普及,近视率逐年攀升,出现低龄化现象,调查结果显示,其中6岁儿童达到14.3%,小学生为35.6%。初中生71.1%,高中生高达80.5%,可…...
市场调研计划书如何写?
想要做好一个产品,市场调研是必不可少的一步,也是第一步,那么如何进行市场调研呢?以下是我整理的一份市场调研计划书,希望能够帮助到大家!!! 一、文档版本控制 主要记录文档的版本…...
手机网站如何建设/做推广怎么做
sleep方法:让线程睡眠sleep()方法是Thread类的静态方法,调用线程会暂时让出指定时间的CPU执行权,把CPU执行权让给其他线程,等到睡眠时间一到,该函数就会正常返回,此线程会自动苏醒。苏醒后,线程就处于就绪状…...
做网站的资料/青岛网站建设运营推广
目录 文章目录目录概述准备测试文件方法实例演练方法1: 通过重定向到null来清空文件内容方法2: 使用冒号":" 或 "true"命令重定向来清空文件方法3: 使用"echo -n "命令清空文件内容方法4: 使用truncate命令来清空文件内容方法5: 使用cat命令和/d…...
网站建设广州/企业网站营销的优缺点
理论 程序组成:数据段:是可选的,数据段声明带有初始值的数据元素,这些数据元素用作汇编语言程序中的变量bss段:是可选的,bss段声明使用0或者null值初始化的数据元素,这些数据元素最常用作汇编语言程序中的缓…...
做网站没装数据库/台州seo排名优化
长按识别二维码,立即咨询阿里云安全专家!...
wordpress修改管理员/如皋网站制作
ContOS7.5 python2.7.5 离线升级 python3.7.41. 第一步:下载安装包 解压2. 第二步:执行安装2.1 创建存放目录2.2 运行脚本 configure2.2.1 注意:2.3 make编译make install安装2.4 最后运行make clean3. 第三步:创建软连接4. 总结报…...
查看网站的目录文件夹权限设置/网站查询域名ip
在工作中使用Mysql数据库,发现建表后的ddl显示表名、字段都是双引号。这样的ddl在线上工单系统无法通过,需要将双引号转成反引号()才行。 通过执行命令show VARIABLES like %sql%发现,sql_mode的值是ANSI_QUOTES。 查看my.cnf配置文件&#x…...