平凡也就两个字: 懒和惰;
成功也就两个字: 苦和勤;
优秀也就两个字: 你和我。
跟着我从0学习JAVA、spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!
关注微信公众号【 IT特靠谱 】,每天都会分享技术心得~
ik分词器是一个分词插件。它可以把elasticsearch中数据映射类型为text(注意:其他类型是不会被分词的!比如:keyword、date类型等)的数据按照分词库切分成一个个关键字!同时也会将我们搜索信息进行分词,然后与es数据库信息进行匹配!
ik分词器有两种分词算法:ik_smart和ik_max_word。ik_smart是一种最小切分算法,ik_max_word是最细粒度切分算法。工作中一般常用ik_max_word算法进行分词!
注意:ik分词器会把分词库中没有的中文按每个字进行拆分。如果不想被拆分成单个汉字,那么我们就需要维护一套自己的分词库!
打开github官网,搜索"elasticsearch-analysis-ik",第一个项目就是ik分词器插件的。
进入"medcl/elasticsearch-analysis-ik"项目
然后点击tags,然后找到7.6.2版本的插件下载即可!
下载后如下:
我们只需解压ik分词器插件安装包,然后将解压文件拷贝到elasticsearch安装目录下的plugin目录下,最后重启elasticsearch服务就完成了ik分词器插件的安装!
重启es服务的目的是重新让es服务加载我们安装的ik分词器插件!
ik分词器有2种算法:ik_smart和ik_max_word,下面我们通过postman工具来测试ik分词器的分词算法!
注意:ik分词器会把分词库中没有的中文按每个字进行拆分。如果不想被拆分成单个汉字,那么我们就需要维护一套自己的分词库!
请求url:http://localhost:9200/_analyze
请求方式:get
请求参数:
{
"analyzer":"ik_smart",
"text":"我爱你,特靠谱"
}
响应结果:
{
"tokens": [
{
"token": "我爱你",
"start_offset": 0,
"end_offset": 3,
"type": "CN_WORD",
"position": 0
},
{
"token": "特",
"start_offset": 4,
"end_offset": 5,
"type": "CN_CHAR",
"position": 1
},
{
"token": "靠",
"start_offset": 5,
"end_offset": 6,
"type": "CN_CHAR",
"position": 2
},
{
"token": "谱",
"start_offset": 6,
"end_offset": 7,
"type": "CN_CHAR",
"position": 3
}
]
}
请求url:http://localhost:9200/_analyze
请求方式:get
请求参数:
{
"analyzer":"ik_max_word",
"text":"我爱你,特靠谱"
}
响应结果:
{
"tokens": [
{
"token": "我爱你",
"start_offset": 0,
"end_offset": 3,
"type": "CN_WORD",
"position": 0
},
{
"token": "爱你",
"start_offset": 1,
"end_offset": 3,
"type": "CN_WORD",
"position": 1
},
{
"token": "特",
"start_offset": 4,
"end_offset": 5,
"type": "CN_CHAR",
"position": 2
},
{
"token": "靠",
"start_offset": 5,
"end_offset": 6,
"type": "CN_CHAR",
"position": 3
},
{
"token": "谱",
"start_offset": 6,
"end_offset": 7,
"type": "CN_CHAR",
"position": 4
}
]
}
通过对比两种算法分词结果可知:ik_smart算法将"我爱你"当作关键词,而ik_max_word算法认为"我爱你"和"爱你"都是关键词词!但是这两种算法都认为"特"、"靠"、"谱"这三个字都是单独的词!也就是说ik_smart(最小切分算法)切分数据的次数最小,而ik_max_word(最细粒度切分算法)切分的次数最多!
如果我们想实现将"特靠谱"当作一个词进行拆分,而不是对每个字进行拆分。那么我们就需要维护一套自定义分词词库!
上面测试例子可以看到,不管是ik_smart还是ik_max_word算法,都不认为"特靠谱"是一个关键词(ik分词器的自带词库中没有有"特靠谱"这个词),所以将这个词拆成了三个词:特、靠和谱。
为了实现将特靠谱认为是一个关键词,我们就需要维护一套分词词库!
打开es安装目录下D:\workSoftInstall\es\elasticsearch-7.6.2\的plugins\ik\目录,我们的ik分词器插件就放在ik目录下!进入config配置文件夹。
从其他xxxx.dic分词库拷贝一份,并命名为:my.dic(名字可以自定义)。这样我们自定义的分词词库就建立好了。
打开my.dic,并添加一些关键词,如:"特靠谱"、"靠谱"等。每一行就是一个关键词。
打开配置文件IKAnalyzer.cfg.xml
指定自定义分词词库名称。
重启es服务就可以进行测试了!
请求url:http://localhost:9200/_analyze
请求方式:get
请求参数:
{
"analyzer":"ik_smart",
"text":"我爱你,特靠谱"
}
响应结果:
{
"tokens": [
{
"token": "我爱你",
"start_offset": 0,
"end_offset": 3,
"type": "CN_WORD",
"position": 0
},
{
"token": "特靠谱",
"start_offset": 4,
"end_offset": 7,
"type": "CN_WORD",
"position": 1
}
]
}
请求url:http://localhost:9200/_analyze
请求方式:get
请求参数:
{
"analyzer":"ik_max_word",
"text":"我爱你,特靠谱"
}
响应结果:
{
"tokens": [
{
"token": "我爱你",
"start_offset": 0,
"end_offset": 3,
"type": "CN_WORD",
"position": 0
},
{
"token": "爱你",
"start_offset": 1,
"end_offset": 3,
"type": "CN_WORD",
"position": 1
},
{
"token": "特靠谱",
"start_offset": 4,
"end_offset": 7,
"type": "CN_WORD",
"position": 2
},
{
"token": "靠谱",
"start_offset": 5,
"end_offset": 7,
"type": "CN_WORD",
"position": 3
}
]
}
可以看到,ik_smart和ik_max_world分词算法都认为"特靠谱"是一个关键词,而ik_max_world分词算法同时会将"靠谱"认为是一个关键词!
到此,ik分词器插件安装成功了!
(1) 商务合作微信号:M9392W
(2) 购物商城: 扫码即可进入博主开发的小程序购物商城,享超大优惠购物,支持一下博主吧~
(3) 博主微信公众号:IT特靠谱,学习更多开发实战技巧!