一、分词的概念
分词:就是把我们要查询的数据拆分成一个个关键字,我们在搜索时,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,再次运行之前的语句,得出结果如下:
可以看到,“迪丽热巴”没有被分词