32.修改IK分词器源码来基于mysql热更新词库-程序员宅基地

技术标签: java  开发工具  数据库  

主要知识点,

  • 修改IK分词器源码来基于mysql热更新词库

   

一、IK增加新词的原因

在第32小节中学习到了直接在es的词库中增加词语,来扩充自已的词库,但是这样做有以下缺点:

1)每次添加完,都要重启es才能生效,非常麻烦

2es是分布式的,可能有数百个节点,你不能每次都一个一个节点上面去修改

这一小节来学习让es不停机,直接在外部mysql中添加新的词语,es中立即热加载到这些新词语。

   

目前业界的热更新的方案:

1)修改ik分词器源码,然后手动支持从mysql中每隔一定时间,自动加载新的词库

2)基于ik分词器原生支持的热更新方案,部署一个web服务器,提供一个http接口,通过modifiedtag两个http响应头,来提供词语的热更新

常用第一种方案,因为第二种方案很不稳定,ik官方社区都建议第二种方案

   

二、修改IK分词器源码步骤

1、下载源码

   

https://github.com/medcl/elasticsearch-analysis-ik/tree/v5.2.0

   

ik分词器,是个标准的java maven工程,直接导入eclipse就可以看到源码

   

2、修改源码

我目前主要学习Python,对Java不是很了解,所以以下的都没有完成。

Dictionary类,169行:Dictionary单例类的初始化方法,在这里需要创建一个我们自定义的线程,并且启动它

HotDictReloadThread类:就是死循环,不断调用Dictionary.getSingleton().reLoadMainDict(),去重新加载词典

Dictionary类,389行:this.loadMySQLExtDict();

Dictionary类,683行:this.loadMySQLStopwordDict();

   

3mvn package打包代码

   

target\releases\elasticsearch-analysis-ik-5.2.0.zip

   

4、解压缩ik压缩包

   

mysql驱动jar,放入ik的目录下

   

5、修改jdbc相关配置

关于mysql的配置,比方说连接地址,端口等。

   

6、重启es

   

观察日志,日志中就会显示我们打印的那些东西,比如加载了什么配置,加载了什么词语,什么停用词

   

7、在mysql中添加词库与停用词

   

8、分词实验,验证热更新生效

转载于:https://www.cnblogs.com/liuqianli/p/8535765.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/anlanmo0960/article/details/102015925

智能推荐

10分钟上手,OpenCV自然场景文本检测(Python代码+实现)_h = xdata0[x] + xdata2[x]-程序员宅基地

文章浏览阅读6.9k次,点赞4次,收藏19次。在本教程中,您将学习如何使用EAST文本检测器在自然场景下检测文本。本教程的主要目的是教读者利用OpenCV和EAST文本检测器来检测文本。运行环境:EAST文本检测器需要OpenCV3.4.2或更高版本,有需要的读者可以先安装OpenCV。主要内容:● 教程第一部分分析为何在自然场景下进行文本检测的挑战性是如此之高。● 接下来简要探讨EAST文本检测器,为何使用,算法新..._h = xdata0[x] + xdata2[x]

记一次SpringBoot 部署到resin容器_springboot resin war-程序员宅基地

文章浏览阅读3.3k次。记一次SpringBoot 部署到resin容器springboot打包war包第一步:将<packaging>war</packaging>改为war包第二步:移除tomcat<dependency> <groupId>org.springframework.boot</groupId> <..._springboot resin war

链路聚合_左边是链路聚合右边是mux中间一条线怎么通讯-程序员宅基地

文章浏览阅读595次。文章目录链路聚合概念二层交换机链路聚合三层交换机链路聚合链路聚合概念链路聚合是将一组物理接口捆绑在一起作为一个逻辑接口来增加带宽的一种方法,又称为多接口负载均衡组或链路聚合组,通过在两台设备之间建立链路聚合组,可以提高更高的通讯带宽和更高的可靠性。链路聚合不仅为设备间通信提供了冗余保护,而且不需要对硬件进行升级链路聚合/端口聚合/端口绑定实现的条件:1.每个Eth-Trunk接口下最多可以包含8个成员接口2.成员接口不能配置任何业务和静态MAC地址3.成员接口加入Eth-Trunk时,必须为缺省_左边是链路聚合右边是mux中间一条线怎么通讯

JAVA web log view 实现实时日志查询_web页面实时日志查看-程序员宅基地

文章浏览阅读2.1k次。项目介绍ws: tail -f 查看服务器日志功能使用方式spring boot 项目直接 java -jar LogView.jar 启动即可,没用数据库!右侧为服务器当前的路径的文件,文件夹可以点击!想看哪个日志,结合上面的路径放入待查看Input查看。 项目分为"宿主机服务器"和"远程服务器" 两种查看方式,只支持linux tail -f *.log 查看日志使用http://127.0.0.1:7003/logView/..._web页面实时日志查看

cmd启动ie浏览器,cmd命令如何打开浏览器_cmd打开浏览器-程序员宅基地

文章浏览阅读8k次,点赞3次,收藏5次。cmd启动ie浏览器,cmd命令如何打开浏览器。_cmd打开浏览器

springboot中的自动装箱原理_springboot自动装箱-程序员宅基地

文章浏览阅读784次,点赞4次,收藏5次。引言:大家在使用springboot的时候不得不感叹它的功能强大和方便,但是作为一个合格的程序员,单纯只是去使用框架是远远不够的!我们知道,Spring Boot 项目创建完成后,即使不进行任何的配置,也能够顺利地运行,这都要归功于 Spring Boot 的自动化配置。Spring Boot 默认使用 application.properties 或 application.yml 作为其全局配置文件,我们可以在该配置文件中对各种自动配置属性(server.port、logging.level._springboot自动装箱

随便推点

CRC-8/MAXIM校验算法(C语言实现)-程序员宅基地

文章浏览阅读5.5k次,点赞4次,收藏23次。  CRC,全称“Cyclic Redundancy Check,即循环冗余校验。是一种常用在常用在检测或校验数据的信道编码技术,其实通过原数据产生的简短的校验码,常用的比如CRC8,CRC8/MAXIM,CRC16/MAXIM,CRC32等。下面介绍一些常用的生成CRC校验码的C语言实现方式。CRC-8/MAXIM(笑)参数模型 NAMEx 8+x5+x4+1宽度 WIDTH8多项式 POLY0x31初始值 INIT0x00结果亦或值 XOROU0x_crc-8/maxim

多线程时Autowired自动注入问题_多线程使用@autowired-程序员宅基地

文章浏览阅读1.6w次,点赞7次,收藏18次。在多线程时使用@Autowired总是获取不到bean,原因是:new thread不在spring容器中,也就无法获得spring中的bean对象。解决方法:手动获取package com.test.configs;import org.springframework.beans.BeansException;import org.springframework.context.A_多线程使用@autowired

Response使用 application/octet-stream 响应到前端_application/octet-stream;charset=utf-8-程序员宅基地

文章浏览阅读1.9w次,点赞4次,收藏5次。response.setContentType("application/octet-stream; charset=UTF-8");response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(fileName));_application/octet-stream;charset=utf-8

利用MultipartFile实现文件上传_实现了multipartfile file上传文件时要选择一个栏目,传给后端一个栏目id,如何实现-程序员宅基地

文章浏览阅读3.3k次。今天在做项目的时候,突然要求做一个文件上传程序,下面就简单的总结一下。首先写一个简单的文件上传jsp页面。uploadFile.jspenctype="multipart/form-data"> 上传文件: 表单 method 属性应该设置为 POST 方_实现了multipartfile file上传文件时要选择一个栏目,传给后端一个栏目id,如何实现

muduo之Singleton_muduo singleton-程序员宅基地

文章浏览阅读1w次。muduo中的单例模式Singleton.h// Use of this source code is governed by a BSD-style license// that can be found in the License file.//// Author: Shuo Chen (chenshuo at chenshuo dot com)#ifn..._muduo singleton

html5 动态存储 localStorage.name 和localStorage.setItem()的差别_localstorage.setitem('aa')和localstorage.aa一样吗-程序员宅基地

文章浏览阅读1.2w次,点赞2次,收藏3次。localStorage.name=“maoguiyou”和localStorage.setItem("name","maoguiyou")都是和h5本地存储的方法,第一个就不用说了,直接把值赋给name字段,主要是说说第二个,第二个也是里面有两个参数,第一个是字段名,第二个是值,他和第一个的差别就在于他能动态存储数据,例如:for(var i=0;i{localStorage.set_localstorage.setitem('aa')和localstorage.aa一样吗