Elasticsearch分词器


Elasticsearch 常用于基于内容的全文搜索,而其实现搜索的一个重要机制即为分词。

举个简单例子,在我的博客中存在三篇文章,三篇文章内容如下:

文章编号 文章内容
(1) 我喜欢程序编程。
(2) 我喜欢文学与电影。
(3) 音乐与电影让人放松。

将三篇文章内容抽取关键字并与文章号进行对应得到如下内容:

文章编号 文章关键字
(1) 我 | 喜欢 | 程序编程
(2) 我 | 喜欢 | 文学 | 与 | 电影
(3) 音乐 | 与 | 电影 | 让人放松

将上述得到的根据相同部分组合得到下表:

文章编号 文章关键字
(1) (2)
(1) (2) 喜欢
(1) 程序编程
(2) 文学
(2) (3) 电影
(3) 音乐
(3) 让人放松

根据最后拆分得到的词典表,当用户搜索关键字 电影 时,即返回 2, 3 两篇文章。

1. 数据分词

了解了分词器的作用,下面就介绍一下在 ES 中如何使用分词器进行分词。

通过工具 POST 方法请求 192.168.0.20:9200/_analyze 接口,请求体参数内容如下:

{
    "analyzer": "standard",
    "text": "I am iron man!"
}

请求返回的参数如下所示,可以看到请求参数中的 text 内容被分割成一个个单词。

2. IK分词器

在上面介绍了分词器的作用和基本使用,但默认的分词器并不支持中文分词,若使用默认分词器对中文句子进行分词,则会默认将一个字当成一个词,无法达到分词的效果。

因此想要给中文分词需要额外安装分词器,IK分词器 则是专为中文分词量身定做,下面分享如何安装与使用。

IK分词器 安装相对简单,进入 IKGitHub 仓库中,作者针对为不同的 ES 版本分别提供了对应的插件包。根据你的 ES 版本选择对应版本的插件包即可,官网直达

ES 安装目录下的 Plugins 中新建 ik 目录,将下载的 Ik分词器 文件上传并解压,完成后重启 ES 即可生效。

3. 使用说明

IK分词器 分词器使用方式与默认的分词器相同,但 IK分词器 提供了两种分词方式,下面分别进行介绍。

(1) ik_smart

ik_smart 分词方式会将句子拆分为单个词语。

{
    "analyzer": "ik_smart",
    "text": "如何学习分词器。"
}

(2) ik_max_word

ik_max_word 分词方式会则拆分句子的所有的组合方式。

{
    "analyzer": "ik_max_word",
    "text": "如何学习分词器。"
}

4. 自定义词典

IK分词器 的基础之上,你也可以根据的自身业务需求额外自定义分词词组。

(1) 词典配置

plugins/ik/config 目录下新建 budai.dic 词典文件,并添加自定义词组。

vi budai.dic 

# 文件内容
如何学习

将自定义词典文件添加到配置中:

cd plugins/ik/config                  # 进入目录

vi IKAnalyzer.cfg.xml                 # 修改配置

(2) 效果测试

还是通过 ik_smart 方式进行分词,与之前相对比可以看到结果中 如何学习 此时已经被当成一个词组了。

{
    "analyzer": "ik_smart",
    "text": "如何学习分词器。"
}


文章作者: 烽火戏诸诸诸侯
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 烽火戏诸诸诸侯 !
  目录