elasticsearch中文分词器插件elasticsearch-analysis-ik远程自定义词典热更新
IK简介
IK分词器基于词库进行分词,analysis-ik内置了一些词典:主词典main.dic、姓氏词典surname.dic、量词词典quantifier.dic、后缀词典suffix.dic、介词词典preposition.dic、停词词典stopword.dic。除此之外还可以通过配置文件IKAnalyzer.cfg.xml对词库进行扩展。
analysis-ik依次从如下两个位置尝试加载IKAnalyzer.cfg.xml:
1.elasticsearch配置文件所在目录的analysis-ik目录下。
2.analysis-ik插件所在目录的config目录下。
如果两个位置均未找到会抛出FileNotFoundException异常。analysis-ik内置词典与IKAnalyzer.cfg.xml放在相同的目录中;如果没有IKAnalyzer.cfg.xml文件,则放置在上述目录2中。找不到内置词典时同样会抛出FileNotFoundException异常。
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"></entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
其中配置项ext_dict和ext_stopwords的值为分号分隔的本地词典路径列表,词典路径是相对于配置文件IKAnalyzer.cfg.xml所在目录的相对路径。配置项remote_ext_dict和remote_ext_stopwords的值为分号分隔的远程词典http地址列表。
远程词典
加载词典
向配置的词典地址发送GET请求,返回内容为每行一个词的词列表。
热更新
向配置的词典地址发送HEAD请求,返回的响应头包括Last-Modified和(或)ETag,两者皆为字符串,当其中任何一个发生改变时,analysis-ik都会发送GET请求重新加载词典。
满足以上两个条件就可以在不重启elasticsearch的情况下热更新词典,当然首次更新完配置后还是需要重启一次elasticsearch的。还有一点需要额外说明的是,无论是远程扩展词典还是远程扩展停词词典发生变化,每次重新加载词典时都会将两者全部重新加载。