elasticsearch5中ik词库远程热加载

如题,本篇我们介绍下如何让ES自动从远程服务器中获取最新的词库(热加载,无须重启ES服务)。

 IK自定义词库是支持远程热加载的,配置起来也非常简单。

先看下官方的说明   : 
remote_ext_dict
该 http 请求需要返回两个头部(header),一个是 Last-Modified,一个是 ETag,这两者都是字符串类型,只要有一个发生变化,该插件就会去抓取新的分词进而更新词库。

该 http 请求返回的内容格式是一行一个分词,换行符用 \n 即可。
满足上面两点要求就可以实现热更新分词了,不需要重启 ES 实例。

可以将需自动更新的热词放在一个 UTF-8 编码的 .txt 文件里,放在 nginx 或其他简易 http server 下,当 .txt 文件修改时,http server 会在客户端请求该文件时自动返回相应的 Last-Modified 和 ETag。可以另外做一个工具来从业务系统提取相关词汇,并更新这个 .txt 文件。

一、在 IKAnalyzer.cfg.xml 配置文件中配置remote_ext_dict指向远程词库地址

    这里,我指向的是服务器本地搭建的一个nignx静态web服务。  

    注意: nginx服务器的默认编码需要设为utf-8,否则可能会有问题 。

<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
  properties>
     <comment>IK Analyzer 扩展配置</comment>
       <!--用户可以在这里配置自己的扩展字典 -->
       <entry key="ext_dict"></entry>
        <!--用户可以在这里配置自己的扩展停止词字典-->
       <entry key="ext_stopwords"></entry>
       <!--用户可以在这里配置远程扩展字典 -->
      <entry key="remote_ext_dict">http://localhost/my_ext_ikword.txt</entry>
      <!--用户可以在这里配置远程扩展停止词字典-->
      <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
  </properties>

这里  http://localhost/my_ext_ikword.txt 为我本地nginx服务器中的一个词库文件。


二、 重启 ES  (启动时会自动从远程加载一次词库,后续若远程词库文件有修改,ES会自动重新加载)

  看下效果 ~~ 

 



 ok,"碰瓷"都能被ik分词器分析出来了。。


猜你喜欢

转载自blog.csdn.net/jasnet_u/article/details/80220225