原理介绍
- ik分词插件在分词过程中,对于词典中已定义的词会采取最大正向匹配的原则进行分词,这个词典中定义的词可以是静态地从插件配置文件中加载(只在启动时加载一次),也可以通过http get请求动态地获取。目前ik在动态获取分词的有主词和停用词。
- 其机制是在ik的配置文件中配置远程获取词库的url,在启动时调用get请求获取。然后每隔1分钟发送一个head请求,如果返回的响应中表明词库有更新的话,就会发送get请求获取,并将获取的词库内容更新到分词器内存中。
ik插件配置
配置文件地址为/plugins/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">custom/mydict.dic;custom/single_word_low_freq.dic;custom/words.dic;custom/words-yoho.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">custom/ext_stopword.dic</entry>
<!--用户可以在这里配置远程扩展字典 -->
<entry key="remote_ext_dict">http://192.168.102.224:8088/search-consumer/dictService/getRemoteMainDict</entry>
<!--用户可以在这里配置远程扩展停止词字典-->
<entry key="remote_ext_stopwords">http://192.168.102.224:8088/search-consumer/dictService/getRemoteStopDict</entry>
</properties>
将这里的remote_ext_dict、remote_ext_stopwords配置为search-consumer对应的地址。
升级过程
ik插件每隔一分钟会发送head请求检查是否有词库更新,但是如果实时去更新的话,会导致之前索引的数据和之后索引的数据分词结果不同导致混乱,因此应该在每天重建索引之前或者手工重建索引之前升级词库。
- 预置词语到数据表
- 将需要新增的词插入到搜索库的dyn_seg_word表;
- 使用restful接口批量预置
预置文件的格式需要使用无bom的UTF-8格式,每一行一个词。
预置的文件地址为/dicts/words-main.dic, 如:/home/dev/yoho-search-consumer/deploy/.tomcat/webapps/search-consumer/WEB-INF/classes/dicts/words-main.dic
接口地址为 http://://dictTools/loadDictFileToDB 如http://192.168.102.224:8088/search-consumer/dictTools/loadDictFileToDB - 预置好的词库会在每天重建索引前(每天凌晨的两点50到三点之间)更新到ik插件中,如果想立即生效,则需要使用强制更新。
触发强制更新
使用restful接口触发强制更新,接口格式为:http://://dictService/forceUpgrade,如http://192.168.102.224:8088/search-consumer/dictService/forceUpgrade。
注:触发强制更新,只是在下次ik发送head请求时会告知需要更新词库,然后在响应get请求时会返回词典表中的数据给ik插件,然后ik加载到内存中,这个过程大概需要1-3分钟左右。检查词库更新效果
curl "http://:9200/productindex/analyze?analyzer=ik_complex&pretty=true&text=<新增词>" 如 curl "http://192.168.102.12:9200/productindex/analyze?analyzer=ik_complex&pretty=true&text=%E5%A5%B3%E9%9E%8B"重建索引 使用restful接口触发索引重建,接口格式为:http://://index/rebuildAll,如http://192.168.102.224:8088/search-consumer/index/rebuildAll。