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());
}

查看索引是否创建成功

相关推荐
0xDevNull3 分钟前
MySQL 别名(Alias)指南:从入门到避坑
java·数据库·sql
lv__pf7 分钟前
springboot原理
java·spring boot·后端
java1234_小锋8 分钟前
Java高频面试题:什么是可重入锁?
java·开发语言
饭后一颗花生米34 分钟前
Git冷命令拯救崩溃现场
大数据·elasticsearch·搜索引擎
云烟成雨TD43 分钟前
Spring AI Alibaba 1.x 系列【22】Agent 并行工具执行与超时 / 协作式取消实战
java·人工智能·spring
段小二1 小时前
服务一重启全丢了——Spring AI Alibaba Agent 三层持久化完整方案
java·后端
段小二1 小时前
Agent 自动把机票改错了,推理完全正确——这才是真正的风险
java·后端
itjinyin1 小时前
ShardingSphere-jdbc 5.5.0 + spring boot 基础配置 - 实战篇
java·spring boot·后端
丶小鱼丶2 小时前
Java虚拟机【JVM】
java·jvm
csdn2015_2 小时前
IDEA配置Continue
java·ide·intellij-idea