一、分词的概念

分词:就是把我们要查询的数据拆分成一个个关键字,我们在搜索时,ElasticSearch会把数据进行分词,然后做匹配。默认的中文分词器会把每一个中文拆分,比如“迪丽热巴”,会拆分成“迪”,“丽”,“热”,“巴”,显然,这并不符合我们的要求,所以ik分词器(中文分词器)能解决这个问题。

二、IK分词器的分词算法

ik分词器存在两种分词算法:

  • ik_smart:称为智能分词,网上还有别的称呼:最少切分,最粗粒度划分
  • ik_max_word:称为最细粒度划分

三、分词算法测试

1、ik_smart 最少切分策略

GET _analyze
{
  "analyzer": "ik_smart",
  "text": "中华人民共和国"
}

在这里插入图片描述

2、ik_max_word 最细粒度划分策略

GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "中华人民共和国"
}

在这里插入图片描述

3、两种分词算法的对比

确实在ik分词器中,ik_smart和ik_max_word的分词有明显区别
可以看到,IK分词器穷尽词库的可能,切分成了几个词

我们再修改下分词的text

GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "我爱迪丽热巴"
}

分词结果如下:
在这里插入图片描述
由上面的分词结果可以发现,"迪丽热巴"是一个明星的名字,有时候,我们在分词的时候并不想拆分他们,只想"迪丽热巴"作为一个关键字进行搜索。
解决方法如下:
将不希望进行分词的词,需要我们自己加入到分词器的字典中。

四、自定义分词配置

找到ElasticSearch的安装目录下的plugin目录,下面有ik分词器的相关配置,
找到config目录,打开IKAnalyzer.cfg.xml文件,可以自定义分词配置
在这里插入图片描述

我在配置文件中加了一个 ;pms_knowledge.dic(注意:多个分词配置用分号隔开)
现在还要自己写一个pms_knowledge.dic字典
在IKAnalyzer.cfg.xml文件同级目录下创建一个pms_knowledge.dic,里面添加上不想被分词的词,此处以“迪丽热巴”为例。
在这里插入图片描述
保存退出,重启es,再次运行之前的语句,得出结果如下:
在这里插入图片描述
可以看到,“迪丽热巴”没有被分词

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐