ES热词动态加载
1,mysql脚本
建库和建表,库我就不说了
CREATE TABLE hot_words (
id bigint(20) NOT NULL AUTO_INCREMENT,
word varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '词语',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE hot_stopwords (
id bigint(20) NOT NULL AUTO_INCREMENT,
stopword varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '停用词',
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
2,下载ik源码,导入idea中
IK分词器的源码地址:https://github.com/medcl/elasticsearch-analysis-ik
修改pom,你用的elasticsearch版本
<elasticsearch.version>7.15.1</elasticsearch.version>
添加sql版本依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
添加src/main/assemblies/plugin.xml文件
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<useTransitiveFiltering>true</useTransitiveFiltering>
<includes>
<include>mysql:mysql-connector-java</include>
</includes>
</dependencySet>
3,在config文件下添加mysql链接和 SQL语句配置文件jdbc-reload.properties
jdbc.url=jdbc:mysql://127.0.0.1:3306/extra_dic?characterEncoding=UTF-8&serverTimezone=GMT&useSSL=false&nullCatalogMeansCurrent=true
jdbc.user=root
jdbc.password=123456
# 更新词库
jdbc.reload.sql=select word from hot_words
# 更新停用词库
jdbc.reload.stopword.sql=select stopword as word from hot_stopwords
# 更新的时间间隔
jdbc.reload.interval=10000
4,在源码org.wltea.analyzer.dic包下添加线程类HotDicReloadThread.java
package org.wltea.analyzer.dic;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.SpecialPermission;
import org.wltea.analyzer.help.ESPluginLoggerFactory;
import java.security.AccessController;
import java.security.Priv

本文介绍了如何实现Elasticsearch(ES)使用IK分词器动态加载热词。首先,通过MySQL脚本创建数据库和表;其次,下载并修改IK分词器源码,添加对SQL的依赖;接着,配置plugin.xml、jdbc-reload.properties文件,并编写HotDicReloadThread.java实现热词更新;然后,更新Dictionary类的相关方法以定时加载热词和停用词;最后,设置权限并打包上传到ES,重启服务即可完成动态加载热词功能。
最低0.47元/天 解锁文章
1248

被折叠的 条评论
为什么被折叠?



