大家好,欢迎来到IT知识分享网。
1. 概述
IK
分词器是ElasticSearch(es)
的一个最最最有名插件,能够把一段中文或者别的语句划分成一个个的关键字,进而在搜索的时候对数据库中或者索引库数据进一个匹配操作
举个小例子,可以将计算机科学与技术学院更细致的拆分为计算机、计算 、算机 、科学、与、技术、学院 、技术学院 … 等等
2. 安装配置
注意版本的对应,必须保证ik
分词器和es
是同一个版本
下载链接:ik分词器GitHub地址
在Elasticsearch7.6.2\plugins
目录下新建ik
目录,将压缩包解压
重启elasticsearch
和kibana
,可以看到ik
分词器已经被加载
3. 自定义拆分文本
有的时候,ik
分词器拆分出来的词语并不是我们想要的,或者说拆分出来的词语不够我使用,此时便可以自定义拆分文本
第一步,首先在Elasticsearch7.6.2\plugins\ik\config
目录下新建一个文本文件,命名为.dic
后缀的文件,例如我命名为myWord.dic
第二步,打开自定义的dic
文件,在其中编写你需要的词语(千万注意,这里要将文件的编码选择为UTF-8
,否则无法正确识别)
第三步,打开Elasticsearch7.6.2\plugins\ik\config
目录下的IKAnalyzer.cfg.xml
文件,将自定义的dic
文件写入
第四步,重启es
和kibana
,可以看到es
已经重新加载了我们自定义的dic
文件
4. 调用
4.1 拆分规则
ik
分词器拥有两种拆分规则,分别为ik_smart
和ik_max_word
ik_smart
:粗糙的拆分,列举常见的拆分
GET _analyze {
"analyzer": "ik_smart", "text": "计算机科学与技术学院" }
ik_max_word
:最细致划分,列举所有的可能
GET _analyze {
"analyzer": "ik_max_word", "text": "计算机科学与技术学院" }
4.2 Rest 调用
利用rest
风格,可以在创建索引时指定分词器
PUT /test2 {
"mappings": {
"properties": {
"name": {
"type": "text" }, "age":{
"type": "long" }, "desc":{
"type": "text" "analyzer":"ik_max_word", } } } }
4.3 SpringBoot 调用
也可以在SpringBoot
中指定分词器,前提是记得导入相关es
依赖
//创建使用ik分词器的索引 void createIndexWithIK() throws IOException {
//1、创建索引请求(这里千万要注意,创建的索引都要求小写) CreateIndexRequest request = new CreateIndexRequest("test_index"); XContentBuilder mappingBuilder = XContentFactory.jsonBuilder(); mappingBuilder.startObject(); {
mappingBuilder.startObject("properties"); {
// 定义age属性 mappingBuilder.startObject("age"); {
mappingBuilder.field("type", "integer"); } mappingBuilder.endObject(); // 定义name属性 mappingBuilder.startObject("name"); {
// 使用keyword类型,不进行分词 mappingBuilder.field("type", "keyword"); } mappingBuilder.endObject(); // 定义desc属性 mappingBuilder.startObject("desc"); {
mappingBuilder.field("type", "text"); mappingBuilder.field("analyzer", "ik_max_word"); // 设置使用 IK 分词器 } mappingBuilder.endObject(); } mappingBuilder.endObject(); } mappingBuilder.endObject(); // 2、将映射添加到索引请求中 request.mapping(mappingBuilder); //3、客户端执行请求(使用默认的请求参数),获得请求后的响应 CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT); System.out.println(response.isAcknowledged()); }
查看索引是否创建成功
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/122111.html