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分词器
安装相对简单,进入 IK
的 GitHub
仓库中,作者针对为不同的 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": "如何学习分词器。"
}