我们知道ES(Elasticsearch)有一个默认的ik分词器,国内用户也可以安装中文分词插件。但这些往往不能满足实际的项目需求,今天就和大家交流一下ES如何扩充自定义词库。话不多说,直奔主题。
一、添加用户词典
在ES的安装路径下找到配置目录custom(如果没有就mkdir),创建用户自定义的词典myTest.dic。这里新添加用户自定义词典,不建议在ES自带的词典里做修改!
自带词典:
用户词典:
二、在用户词典中加入分词词汇
编辑刚刚添加的用户词典myTest.dic,加入用户需要的词汇,这里从《中国当代毒品犯罪隐语研究》(欧阳国亮、陈曼 著)一书中的196-215页挑选如下词汇加入词典:
三、将用户词典写入配置文件
ES词典的配置文件为IKAnalyzer.cfg.xml。编辑该文件,加入我们自定义的词典:
四、重启ES
这一步,重启ES(查看ES进程并kill掉,然后重启)保证刚刚加入配置的词典生效:
五、测试
①创建测试索引
②创建映射mapping
③插入数据
④测试
检索"停":
检索"停阿磨":
⑤分析和总结
我们可以看到步骤④的测试中,我们检索"停"的时候,并不会出现我们插入的id为1的那条数据(content为"停阿磨烫片子四号客屁儿货朵多"),是因为"停阿磨"已经作为一个分词了!而我们检索"停阿磨"的时候,按照打分规则首先匹配到id为1的数据,然后根据相似度匹配到包含"磨"的记录,表示"停阿磨"分词成功!