ElasticSearch 添加IK分词器
- 前言
- 一、IK分词器的算法
- 二、Ik分词器的下载安装(Winows 版本)
- 三、Ik分词器的下载安装(Linux 版本)
- 四、验证测试(postman工具)
- 测试 ik_smart 分词算法
- 测试 ik_max_word 分词算法
- 扩展字典
前言
- Elasticsearch(ES)内置携带了多种类型的分词器,而Standard Analyzer(单字分词)只是其中之一,并且是默认使用的分词器。
- IK分词器是一个专门为中文文本设计的分词工具,它不是ES的内置组件,而是一个需要单独安装和配置的插件。
- 在Elasticsearch中,IK分词器和Standard Analyzer是并存的关系,它们并不会互相排斥或覆盖。
- 在Elasticsearch中,当你在创建索引时为某个字段指定了特定的分词器(比如中文分词器IK Analyzer),那么这个分词器就会被应用于该字段的文本数据,在后续的索引和查询过程中都会使用这个分词器来处理该字段的文本。
如果你没有为字段指定分词器,Elasticsearch会使用该字段类型默认的分词器。对于文本(text)类型的字段,默认的分词器通常是Standard Analyzer,它适用于大多数英文文本的分词处理,但不适用于中文等需要特殊分词处理的文本。
一、IK分词器的算法
IK提供了两个分词算法:ik_smart和ik_max_word,其中ik smart为最少切分,ik_max_word为最细粒度划分!
ik_max_word: 会将文本做最细粒度的拆分,比如会将"中华人民共和国国歌"拆分为"中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌",会穷尽各种可能的组合;
ik_smart: 会做最粗粒度的拆分,比如会将"中华人民共和国国歌"拆分为"中华人民共和国,国歌"。
二、Ik分词器的下载安装(Winows 版本)
下载地址: https://github.com/medcl/elasticsearch-analysis-ik
注意:IK分词器插件的版本要和ElasticSearch的版本一致
我这边是v7.15.2的
解压安装包到 ElasticSearch 所在文件夹中的plugins目录中:
Windows 环境下 再启动ElasticSearch,查看IK分词器插件是否安装成功:
三、Ik分词器的下载安装(Linux 版本)
下载地址: https://github.com/medcl/elasticsearch-analysis-ik
注意:IK分词器插件的版本要和ElasticSearch的版本一致
我这边是v7.15.2的
需要在plugins目录下创建ik分词器文件夹(文件夹名称一定要命名为ik,不然启动elasticsearch时候会报错的),然后在把里面的东西解压放在这个ik下面,如下:
解压完ik分词器安装包后,重启elasticsearch。
四、验证测试(postman工具)
使用postman工具校验
测试 ik_smart 分词算法
分词请求+入参:
请求:
http://127.0.0.1:9200/_analyze
入参:
{
"analyzer": "ik_smart",
"text": "海内存知己,天涯若比邻"
}
结果如下所示:
测试 ik_max_word 分词算法
分词请求+入参:
请求:
http://127.0.0.1:9200/_analyze
入参:
{
"analyzer": "ik_max_word",
"text": "海内存知己,天涯若比邻"
}
结果如下所示:
比较两个分词算法对同一句中文的分词结果,ik_max_word比ik_smart得到的中文词更多(从两者的英文名含义就可看出来),但这样也带来一个问题,使用ik_max_word会占用更多的存储空间。
扩展字典
从上面的举例来看,我使用 ik_max_word 算法时,分词里面没有“存知己”这个词,如果我想加该怎么办,这个时候就涉及了扩展字典的操作了。
第一步:
在ik分词器文件的config目录中新建自定义的字典文件,以.dic为后缀,并在文件中加入“存知己”
第二步:
然后打开 IKAnalyzer.cfg.xml 文件,把自定义的字典添加到IK的字典中:
第三步:
重启ES,再次测试,就发现有了“存知己”这个词了
参考文章
【1】ElasticSearch——IK分词器的下载及使用
【2】Elasticsearch和Kibana版本对应关系
【3】ElasticSearch在linux环境中集成IK分词器