安装
下载地址:https://github.com/medcl/elas...
解压到插件目录 your-es-root/plugins/ik/ 即可。
重启 ES 服务器,观察加载日志是否包含 IK 分词器。
IK 分词器的使用
IK 分词器有两种分词模式:
- ik_max_word:最细粒度拆分,即最大词数。
- ik_smart:最粗粒度拆分,即最小词数。
GET _analyze
{
"analyzer": "ik_max_word",
"text": "中华人民共和国人民大会堂"
}
结果为:中华人民共和国、中华人民、中华、华人、人民共和国、人民、共和国、大会堂、大会、会堂等。
GET _analyze
{
"analyzer": "ik_smart",
"text": "中华人民共和国人民大会堂"
}
结果为:中华人民共和国、人民大会堂。
最佳实践
两种分词器使用的最佳实践是:索引时使用ik_max_word,搜索时使用ik_smart。
即:索引时最大化的将储存的内容进行分词,搜索时更精确的搜索到想要的结果。
例如用户输入“华为手机”,用户的想法是想搜索出“华为手机”的商品,而不是华为的其它商品或者其他品牌的手机,也就是商品信息中必须只有华为手机这个词。
此时使用ik_smart
和ik_max_word
都会将”华为手机“拆分为”华为“和”手机“两个词,那些只包括“华为”这个词的信息也会被搜索出来,没有满足用户的目标。
这种情况可以将“华为手机”添加到自定义词库,添加后两个分词器的效果为:
- ik_max_word:华为手机、华为、手机
- ik_smart:华为手机
这时候在索引时使用 ik_max_word,搜索时用 ik_smart 即可实现目标。
如果想将包含“华为”这个词的信息也搜索出来,输入 “华为 华为手机”,就会将包含华为、华为手机的信息都搜索出来。
增加自定义分词
vim your-es-root/plugins/ik/config/IKAnalyzer.cfg.xml
<entry key="ext_dict">my.dic</entry>
vim your-es-root/plugins/ik/config/my.dic
华为手机
重启 ES 服务器,观察加载日志是否包含自定义分词配置文件。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。