ik词库动态更新说明.md 3.65 KB

原理介绍

  • 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请求检查是否有词库更新,但是如果实时去更新的话,会导致之前索引的数据和之后索引的数据分词结果不同导致混乱,因此应该在每天重建索引之前或者手工重建索引之前升级词库。

  1. 预置词语到数据表
  2. 将需要新增的词插入到搜索库的dyn_seg_word表;
  3. 使用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/loadDictFileToDBhttp://192.168.102.224:8088/search-consumer/dictTools/loadDictFileToDB
  4. 预置好的词库会在每天重建索引前(每天凌晨的两点50到三点之间)更新到ik插件中,如果想立即生效,则需要使用强制更新。
  5. 触发强制更新
    使用restful接口触发强制更新,接口格式为:http://://dictService/forceUpgrade,如http://192.168.102.224:8088/search-consumer/dictService/forceUpgrade
    注:触发强制更新,只是在下次ik发送head请求时会告知需要更新词库,然后在响应get请求时会返回词典表中的数据给ik插件,然后ik加载到内存中,这个过程大概需要1-3分钟左右。

  6. 检查词库更新效果
    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"

  7. 重建索引 使用restful接口触发索引重建,接口格式为:http://://index/rebuildAll,如http://192.168.102.224:8088/search-consumer/index/rebuildAll