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

查看索引是否创建成功

相关推荐
GISer_Jing1 小时前
Git协作开发:feature分支、拉取最新并合并
大数据·git·elasticsearch
小林学习编程1 小时前
Springboot + vue + uni-app小程序web端全套家具商场
前端·vue.js·spring boot
ladymorgana2 小时前
【Spring boot】tomcat Jetty Undertow对比,以及应用场景
spring boot·tomcat·jetty
IT_10242 小时前
Spring Boot项目开发实战销售管理系统——系统设计!
大数据·spring boot·后端
Fireworkitte2 小时前
Apache POI 详解 - Java 操作 Excel/Word/PPT
java·apache·excel
weixin-a153003083162 小时前
【playwright篇】教程(十七)[html元素知识]
java·前端·html
DCTANT3 小时前
【原创】国产化适配-全量迁移MySQL数据到OpenGauss数据库
java·数据库·spring boot·mysql·opengauss
Touper.3 小时前
SpringBoot -- 自动配置原理
java·spring boot·后端
黄雪超3 小时前
JVM——函数式语法糖:如何使用Function、Stream来编写函数式程序?
java·开发语言·jvm
ThetaarSofVenice3 小时前
对象的finalization机制Test
java·开发语言·jvm