IK分词器

本文分为简介、安装、使用三个角度进行讲解。

简介

倒排索引

众所周知,ES是一个及其强大的搜索引擎,那么它为什么搜索效率极高呢,当然和他的存储方式脱离不了关系,ES采取的是倒排索引,就是反向索引;常见索引结构几乎都是通过key找value,例如Map;倒排索引的优势就是有效利用Value,将多个含有相同Value的值存储至同一位置。

分词器

为了配合倒排索引,分词器也就诞生了,只有合理的利用Value,才会让倒排索引更加高效,如果一整个Value不进行任何操作直接进行存储,那么Value和key毫无区别。分词器Analyzer 通常会对Value进行操作:一、字符过滤,过滤掉html标签;二、分词,英文安装空格将单词分开,中文通常采取高级算法进行分词,显然IK在这方面是做的最好的中文分词;三、单词加工,将大小写全部转换为小写。

IK分词器

IK分词器,提供两种颗粒度拆分(ik_smart ,ik_max_word)

  • ik_smart(最粗粒度拆分)
  • 分割的粒度较小
  • ik_max_word(最细粒度划分)
  • 分割的力度较大
代码测试

使用kinana发送请求

POST /_analyze
{
  "analyzer": "ik_smart",
  "text":"我们一起吃饭"
}
//分词结果  我们  一起  吃饭

POST /_analyze
{
  "analyzer": "ik_max_word",
  "text":"我们一起吃饭"
}

//分词结果 我们 一起 一 起 吃饭

总结:明显最细粒度划分的切割力度更大

安装

官网下载即可,要和ES版本对应,放到ES 的plugins文件夹下

使用

IK支持自定义扩展词典和停用词典,扩展词典的意思就是,将一些非关键词,设置为关键词;停用词典就是将一些默认的关键词,设置为非关键词

如何配置扩展词典与停用词典

打开ik目录下config/IKAnalyzer.cfg.xml

这里需要写入两个文件名 随便起,后缀要dic。

IK分词器 Java 集成 ik分词器 分词原理_分词器


在config目录下 创建这两个文件 文档一行只可以写入一个值,具体格式如下

IK分词器 Java 集成 ik分词器 分词原理_分词器_02


最后要重启ES服务 才可以生效

扩展词典测试

POST /_analyze
{
  "analyzer": "ik_max_word",
  "text":"李小八"
}
//此时的分词结果是 李 小 八
//我们把李小八这个词添加到扩展词典dict.dic后 分词结果只有李小八

停用词典测试

POST /_analyze
{
  "analyzer": "ik_smart",
  "text":"我们一起吃饭"
}

//此时分词结果为 “我们” “一起” ”吃饭“
//但当我们配置到stopwords.dic 添加吃饭,分词结果就会变成  ”我们“ ”一起“
//              停用词典是不会作为关键字被显示的