IK分词器安装、配置、分词自定义、Rest使用、SpringBoot使用

文章目录

  • [1. 概述](#1. 概述)
  • [2. 安装配置](#2. 安装配置)
  • [3. 自定义拆分文本](#3. 自定义拆分文本)
  • [4. 调用](#4. 调用)
    • [4.1 拆分规则](#4.1 拆分规则)
    • [4.2 Rest 调用](#4.2 Rest 调用)
    • [4.3 SpringBoot 调用](#4.3 SpringBoot 调用)

1. 概述


IK分词器是ElasticSearch(es)的一个最最最有名插件,能够把一段中文或者别的语句划分成一个个的关键字,进而在搜索的时候对数据库中或者索引库数据进一个匹配操作

举个小例子,可以将计算机科学与技术学院更细致的拆分为计算机、计算 、算机 、科学、与、技术、学院 、技术学院 ... 等等

2. 安装配置


注意版本的对应,必须保证ik分词器和es是同一个版本

下载链接:ik分词器GitHub地址

Elasticsearch7.6.2\plugins目录下新建ik目录,将压缩包解压

重启elasticsearchkibana,可以看到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文件写入

第四步,重启eskibana,可以看到es已经重新加载了我们自定义的dic文件

4. 调用


4.1 拆分规则


ik分词器拥有两种拆分规则,分别为ik_smartik_max_word

ik_smart:粗糙的拆分,列举常见的拆分

bash 复制代码
GET _analyze
{
  "analyzer": "ik_smart",
  "text": "计算机科学与技术学院"
}

ik_max_word:最细致划分,列举所有的可能

bash 复制代码
GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "计算机科学与技术学院"
}

4.2 Rest 调用


利用rest风格,可以在创建索引时指定分词器

bash 复制代码
PUT /test2
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "age":{
        "type": "long"
      },
      "desc":{
        "type": "text"
        "analyzer":"ik_max_word",
      }
    }
  }
}

4.3 SpringBoot 调用


也可以在SpringBoot中指定分词器,前提是记得导入相关es依赖

java 复制代码
//创建使用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());
}

查看索引是否创建成功

相关推荐
朦胧之5 小时前
AI 编程-老项目改造篇
java·前端·后端
程序猿大帅9 小时前
别再只当调包侠了:用 Spring AI 落地 Function Calling,我被大模型硬生生砸出了三个大坑
java
程序员晓琪10 小时前
约定大于配置:基于 Java 包名自动生成 API 版本路由的最佳实践
java·spring boot·后端
Flittly10 小时前
【AgentScope Java新手村系列】(11)中断与恢复
java·spring boot·spring
众少成多积小致巨11 小时前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
东坡白菜11 小时前
破局全栈:前端开发的Java入门实战记录—JPA(2)
java·后端
SimonKing17 小时前
艹,维护AI写的代码,我心态崩了......
java·后端·程序员
用户2986985301418 小时前
Java Word 文档样式进阶:段落与文本背景色设置完全指南
java·后端
小bo波1 天前
从"任意文件复制"深挖Java I/O:字符流与字节流的本质抉择
java·nio·io流·后端开发·文件复制