IK分词器详解

全栈自学社区

共 2659字,需浏览 6分钟

 · 2021-01-17

点击上方蓝色字体,选择“置顶或者星标” 

优质文章第一时间送达!


IK分词器

什么是 IK 分词器

分词:即把一段中文或者别的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词器是将每个字看成一个词,比如"我爱技术"会被分为"我","爱","技","术",这显然不符合要求,所以我们需要安装中文分词器IK来解决这个问题

IK提供了两个分词算法:ik_smartik_max_word

其中ik_smart为最少切分,ik_max_word为最细粒度划分

下载安装

下载不说直接安装.记得版本相同, 公众号内回复电脑环境关键字可获取我已经下载好的.

解压缩后拷贝到ElasticSearchplugins文件夹下

创建 ik 目录

重启ES

之前是没有插件加载的

可以清晰的看到加载了 analysis-ik

也可以通过ES自带的工具查看 命令行执行 ElasticSearch-plugin list

进入Kibana测试

先测试 ik_smart

最少划分

GET _analyze
{
  "analyzer""ik_smart"
  , "text""天津理工大学"
}

返回结果

{
  "tokens" : [
    {
      "token" : "天津",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "理工大学",
      "start_offset" : 2,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 1
    }
  ]
}

最细粒度划分

GET _analyze
{
  "analyzer""ik_max_word"
  , "text""天津理工大学"
}

返回结果

{
  "tokens" : [
    {
      "token" : "天津",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "理工大学",
      "start_offset" : 2,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "理工大",
      "start_offset" : 2,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "理工",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
      "token" : "工大",
      "start_offset" : 3,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 4
    },
    {
      "token" : "大学",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 5
    }
  ]
}

若发现结果没有区别, 而且他不认为 查询的词 比如 鑫泽 是一个词, 这就是一个问题,怎么办呢?

这种自己需要的词,需要自己加到字典中

IK分词器增加自己的配置

我们找到IK的配置文件, 位于ik/config/IKAnalyzer.cfg.xml

IKAnalyzer.cfg.xml


properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
 <comment>IK Analyzer 扩展配置comment>
 
 <entry key="ext_dict">entry>
  
 <entry key="ext_stopwords">entry>
 
 
 
 
properties>

修改后的IKAnalyzer.cfg.xml


properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
 <comment>IK Analyzer 扩展配置comment>
 
 <entry key="ext_dict">xinze.dicentry>
  
 <entry key="ext_stopwords">entry>
 
 
 
 
properties>

xinze.dic

鑫泽

测试

GET _analyze
{
  "analyzer""ik_smart"
  , "text""超级喜欢鑫泽"
}

结果

{
  "tokens" : [
    {
      "token" : "超级",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "喜欢",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "鑫泽",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 2
    }
  ]
}

文章已上传gitee https://gitee.com/codingce/hexo-blog
项目地址: https://github.com/xzMhehe/codingce-java


更多推荐内容

↓↓↓

线性表概述

线性表的顺序存储——顺序表

Redis配置文件详解

如果你喜欢本文

请长按二维码,关注公众号

转发朋友圈,是对我最大的支持哟

以上,便是今天的分享,希望大家喜欢,觉得内容不错的,欢迎「分享」「」或者点击「在看」支持,谢谢各位。

浏览 36
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报