安装

下载地址: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_smartik_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 服务器,观察加载日志是否包含自定义分词配置文件。


小伍
139 声望4 粉丝