Elasticsearch (ES篇): 配置分词器

378 阅读1分钟

「这是我参与2022首次更文挑战的第24天,活动详情查看:2022首次更文挑战」。

配置分词器

配置文件 ik/config/IKAnalyzer.cfg.xml \
<?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">mydict.dic;single_word_low_freq.dic</entry>

 <!--用户可以在这里配置自己的扩展停止词字典-->

<entry key="ext_stopwords">ext_stopword.dic</entry>

  <!--用户可以在这里配置远程扩展字典 -->

<entry key="remote_ext_dict">http://xxx.com/xxx.dic</entry>

  <!--用户可以在这里配置远程扩展停止词字典-->

<entry key="remote_ext_stopwords">http://xxx.com/xxx.dic</entry>

</properties>

静态更新 IK 分词

(1) 在config 目录下创建自己的分词文件,比如mydict.dic 里面写上自己需要的新的分词,比如一些网络流行语,再创建dictstop.dic里面写上要停用的词;

(2) 在IKAnalyzer.cfg.xml 配置文件配置;

<!--用户可以在这里配置自己的扩展字典 -->

<entry key="ext_dict">mydict.dic</entry>

 <!--用户可以在这里配置自己的扩展停止词字典-->

<entry key="ext_stopwords">dictstop.dic</entry>

(3) 重启elasticsearch;

这种做法每次添加新的分词都需要重启elasticsearch;

动态更新IK 分词

目前IK分词插件支持动态更新分词,通过在 IK 配置文件中配置

<!--用户可以在这里配置远程扩展字典 -->

<entry key="remote_ext_dict">http://xxx.com/xxx.dic</entry>

<!--用户可以在这里配置远程扩展停止词字典-->

<entry key="remote_ext_stopwords">http://xxx.com/xxx.dic</entry>

其中 location 是指一个url,比如 yoursite.com/mydict.dic,…

该http 请求需要返回两个头部(header),一个是 Last-Modified,一个是 ETag,这两者都是字符串类型,只要有一个发生变化,该插件就会去抓取新的分词进而更新词库,该 http 请求返回的内容格式是一行一个分词,换行符用 \n 即可;

满足上面两点要求就可以实现热更新分词了,不需要重启ES实例;

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