elaseticsearch 配置ik分词器的热更新_ES6.0.0实战-IK分词器词库动态更新

前言

使用过IK Analysis plugin的兄弟都知道,要扩展IK的词库,有两种方式:

  • 通过ext_dict指定本地词库文件,例如:

ext.dic

  • 通过remote_ext_dict指定远程词库请求地址,例如:

http://yoursite.com/getCustomDict

第一种方式扩展简单,但维护起来比较麻烦。假设ES集群包含多个节点,那么每个节点都要更新词库文件,而且要使其生效,还必须重启每个节点。

第二种方式扩展稍显麻烦,但能在不重启ES的情况下动态扩展词库。但要实现该功能,需要提供HTTP接口,而且还要按照约定在响应头中返回Last-Modified,ETag header。线程收到响应时会比较这两个header(详细操作可查看源码),以便实现增量更新.

本文将基于MySQL来实现词库更新,原因如下:

  • 方便扩展词库集中管理,因为即便提供HTTP接口,热词数据还是要持久化存储到关系数据库中(防止词库数据丢失)。
  • 增量更新更简单,首次更新热词时,先记录下最后一条单词的时间戳,下次更新就可以该时间戳为起点,实现后续的增量更新。

实现步骤

1.下载elasticsearch-analysis-ik-6.0.0源码,其下载地址为:

https://github.com/medcl/elasticsearch-analysis-ik/archive/v6.0.0.zip

2.解压并以Maven Project导入Eclipse,导入后如下所示:

274d2a0d1d8ebe50c1da43ee30f4d959.png

上面标有红色箭头的就是本次要修改或添加的内容。

3.修改pom.xml,在元素下增加mysql-jdbc驱动依赖:

mysqlmysql-connector-java5.1.47

4.在test数据库下创建hot_words表:

CREATE TABLE `hot_words` ( `word` varchar(32) NOT NULL, PRIMARY KEY (`word`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

5.在工程的config目录下新增jdbc-hot-word.properties文件。其内容为:

#数据库URLjdbc.url=jdbc:mysql://192.168.88.130:3306/test#数据库用户名jdbc.user=test#数据库密码jdbc.password=test123456#加载词库的sqljdbc.reload.sql=select word from hot_words#重新加载词库的频率jdbc.reload.interval=5

6.编码

  • 在org.wltea.analyzer.dic包下新增JdbcMonitor类,其代码为:
package org.wltea.analyzer.dic;import org.apache.logging.log4j.Logger;import org.elasticsearch.common.logging.ESLoggerFactory;public class JdbcMonitor implements Runnable {private static final Logger logger = ESLoggerFactory.getLogger(JdbcMonitor.class.getName()); public void run() {try {logger.info("JdbcMonitor...");Dictionary.getSingleton().reLoadMainDict();} catch (Exception e) {}}}
  • 修改org.wltea.analyzer.dic.Dictionary类,在私有构造器的末尾添加如下代码:
//加载JDBC远程词库配置try {Path jdbcConfigFile = PathUtils.get(getDictRoot(), PATH_JDBC_HOT_WORD);props.load(new FileInputStream(jdbcConfigFile.toFile()));logger.info("加载"+PATH_JDBC_HOT_WORD+"成功");} catch (Exception e) {logger.error("加载"+PATH_JDBC_HOT_WORD+"失败
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值