ik分词器动态从数据库中加载数据无需重启

ik分词器加载mysql数据库中的热词库

1、下载elasticsearch-analysis-ik 源码包

下载elasticsearch-analysis-ik打开项目(https://github.com/medcl/elasticsearch-analysis-ik)

2、修改插件代码

(1)修改pom.xml中对应版本号

在这里插入图片描述

(2)org.wltea.analyzer.dic.Dictionary 单例类的初始化方法 initial,所有词库都是在这里进行创建

	/*** 词典初始化 由于IK Analyzer的词典采用Dictionary类的静态方法进行词典初始化* 只有当Dictionary类被实际调用时,才会开始载入词典, 这将延长首次分词操作的时间 该方法提供了一个在应用加载阶段就初始化字典的手段* * @return Dictionary*/public static synchronized void initial(Configuration cfg) {if (singleton == null) {synchronized (Dictionary.class) {if (singleton == null) {singleton = new Dictionary(cfg);//主词库singleton.loadMainDict();singleton.loadSurnameDict();singleton.loadQuantifierDict();singleton.loadSuffixDict();singleton.loadPrepDict();//停用词库singleton.loadStopWordDict();//新增线程加载词库(此处新增)new Thread(new HotDict()).start();if(cfg.isEnableRemoteDict()){// 建立监控线程for (String location : singleton.getRemoteExtDictionarys()) {// 10 秒是初始延迟可以修改的 60是间隔时间 单位秒pool.scheduleAtFixedRate(new Monitor(location), 10, 60, TimeUnit.SECONDS);}for (String location : singleton.getRemoteExtStopWordDictionarys()) {pool.scheduleAtFixedRate(new Monitor(location), 10, 60, TimeUnit.SECONDS);}}}}}}

(3)新增类HotDict,循环调用方法,对词库进行更新

package org.wltea.analyzer.dic;public class HotDict implements Runnable{@Overridepublic void run() {while (true) {Dictionary.getSingleton().reLoadMainDict();}}
}

(4)在 loadMainDict 方法中添加自定义的 MySQL 词库

private void loadMainDict() {// 建立一个主词典实例_MainDict = new DictSegment((char) 0);// 读取主词典文件Path file = PathUtils.get(getDictRoot(), Dictionary.PATH_DIC_MAIN);loadDictFile(_MainDict, file, false, "Main Dict");// 加载扩展词典this.loadExtDict();// 加载远程自定义词库this.loadRemoteExtDict();// 加载远程MySql自定义词库(新增)this.loadMySQLExtDict();}/*** 加载用户配置的MySQL热词库(新增)*/private void loadMySQLExtDict() {ResultSet mainRs = null;Connection conn = null;Statement stmt = null;try {Path file = PathUtils.get(getDictRoot(), "jdbc-reload.properties");props.load(new FileInputStream(file.toFile()));logger.info("[==========]query hot dict from DB, " + props.getProperty("jdbc.reload.sql") + "......");Class.forName(props.getProperty("jdbc.driver"));conn = DriverManager.getConnection(props.getProperty("jdbc.url"),props.getProperty("jdbc.user"),props.getProperty

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/285759.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python使用HTTP库发送GET请求的示例——轻松探索网络世界

大家好,今天我要给大家介绍一个非常实用的Python库——HTTP库,它可以帮助我们轻松地发送HTTP请求。今天,我们就来学习一下如何使用HTTP库发送GET请求。 首先,我们需要安装HTTP库。如果你还没有安装,可以通过pip命令进…

开源一个超好用的接口Mock工具——Msw-Tools

作为一名前端开发,是不是总有这样的体验:基础功能逻辑和页面UI开发很快速,本来可以提前完成,但是接口数据联调很费劲,耗时又耗力,有时为了保证进度还不得不加加班。 为了摆脱这种痛苦,经过一周的…

RK3588安装TVM-GPU版本

1.前言 RK3588还有相应的GPU可以使用,我们也可以配置相关的环境,进行GPU的使用 2. RK3588的GPU介绍 Mali-G610 是 Arm 公司开发的第三代 Valhall 架构的 GPU。它于 2022 年 7 月发布,面向中端和高端移动设备。 Mali-G610 采用 Armv9 架构&am…

c jpeg 理论霍夫曼 DC AC表,c程序实现正向逆向转换

此4张表是理论表,不是针对某张图片的特定表。如程序不统计生成某图片的专用霍夫曼表,应该也可用理论表代用。 1.亮度DC表 左边第一列是二进制位数,就是对此位数编码 中间一列是生成比特流的位数,右边是生成的比特流。 2.色度DC…

KSP音频抓包

1. 按照网上其他教程&#xff0c;安装KSP抓音频 Biu~笔记&#xff1a;高通蓝牙ADK&#xff08;38&#xff09;-- KSP in MDE - 大大通(简体站) Biu~笔记&#xff1a;高通蓝牙ADK&#xff08;22&#xff09;--DSP音频链路监听 - 大大通(简体站) <<Biu~笔记&#xff1a;高…

《volatile使用与学习总结:2023-12-17》多层面分析学习java关键字--volatile

一、简介 volatile是java中提供的一种轻量级的同步机制&#xff0c;相比于synchronized更加轻量&#xff0c;因为volatile避免了线程频繁的上下文切换和调度&#xff0c;但是也有缺点&#xff0c;同步性差并且使用起来易出错。 二、并发编程的三个概念 原子性 原子性即一个操…

抖店不出单,看看是不是这几个方面出了问题?

我是电商珠珠 很多人在开了抖店之后&#xff0c;原本预想的销量跟实际的有很大差别&#xff0c;以为每天可以出上百单甚至上千单&#xff0c;实际上一周还出不了五十单。 有人就会疑惑说我明明都按照网上的说法做了&#xff0c;怎么结果还是这样&#xff1f;我做店已经有三年…

直播预约丨《实时湖仓实践五讲》第五讲:实时湖仓领域的最佳实践解析

如今&#xff0c;大规模、高时效、智能化数据处理已是“刚需”&#xff0c;企业需要更强大的数据平台&#xff0c;来应对数据查询、数据处理、数据挖掘、数据展示以及多种计算模型并行的挑战&#xff0c;湖仓一体方案应运而生。 《实时湖仓实践五讲》是袋鼠云打造的系列直播活…

域架构下的功能安全思考

来源&#xff1a;联合电子 随着整车电子电气架构的发展&#xff0c;功能域控架构向整车集中式区域控制演进。新的区域控制架构下&#xff0c;车身控制模块(BCM)&#xff0c;整车控制单元&#xff08;VCU&#xff09;&#xff0c;热管理系统&#xff08;TMS&#xff09;和动力底…

docker 限制ip访问端口

需求限制外网访问 docker的某个服务 经过查找 发现 ubuntu的 ufw 防火墙是无效的 技术交流http://idea.coderyj.com/ 1.查看docker的 路由 iptables --line -nvL DOCKER-USER默认是允许所有的访问不限制 2.添加限制规则 iptables 是从上往下匹配的所以我们限制规则要在第一条 …

手机备忘录怎么备份 手机备忘录备份方法

作为现代人&#xff0c;手机几乎成了我们生活中不可或缺的一部分。而备忘录&#xff0c;更是手机中承载着我们重要信息和日常琐事的小助手。想象一下&#xff0c;你在超市购物时&#xff0c;依靠备忘录记下所需物品&#xff1b;或者在工作会议中&#xff0c;用备忘录快速记录关…

2-以太坊虚拟机

以太坊虚拟机&#xff0c;简称EVM&#xff0c;是用来执行以太坊上的交易的。业务流程如下图&#xff1a; 输入一笔交易&#xff0c;内部会转换成一个Message对象&#xff0c;传入EVM执行。 如果是一笔普通转账交易&#xff0c;那么直接修改StateDB中对应的账户余额即可。如果…