前言
ElasticSearch 核心功能就是数据检索,首先通过索引将文档写入 es。
查询分析则主要分为两个步骤:
- 1、词条化:分词器将输入的文本转为一个一个的词条流。
- 2、过滤:比如停用词过滤器会从词条中去除不相干的词条(的,嗯,啊,呢);另外还有同义词过滤器、小写过滤器等。
我们可使用内置分词器、第三方、或自定义分词器。
一、内置分词器
内置分词器说明:
分词器 | 标识 | 作用 |
---|---|---|
Standard Analyzer | standard | 标准分词器,适用于英语等 |
Simple Analyzer | simple | 简单分析器,基于非字母字符进行分词,单词会被转换为小写字母 |
Whitespace Analyzer | whitespace | 空格分词器,按照空格进行切分 |
Stop Analyzer | stop | 类似于简单分词器,但是增加了停用词的功能 |
KeyWord Analyzer | keyword | 关键分词器,输入文本等于输出文本 |
Pattern Analyzer | pattern | 利用正则表达式对文本切分,支持停用词 |
Language Analyzer | 多种西语系arabic, brazilian, catalan, english等 | 一组旨在分析特定语言文本的分析切分 |
Fingerprint Analyzer | - | 指纹分析仪分词器,通过创建标记进行重复检测 |
二、中文IK分词器(第三方)
在 Es 中,使用较多的中文分词器是 elasticsearch-analysis-ik,这个是 es 的一个第三方插件,代码托管在 GitHub 上:https://github.com/medcl/elasticsearch-analysis-ik
两种使用方式:
- 1、直接运行ES提供的命令:
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.9.3/elasticsearch-analysis-ik-7.9.3.zip
- 2、下载安装
首先打开分词器官网:https://github.com/medcl/elasticsearch-analysis-ik。
然后在 https://github.com/medcl/elasticsearch-analysis-ik/releases 页面找到最新的正式版,下载下来。我们这里的下载链接是:
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.9.3/elasticsearch-analysis-ik-7.9.3.zip
。
然后将下载文件解压。
然后在 es/plugins 目录下,新建 ik 目录,并将解压后的所有文件拷贝到 ik 目录下。
最后重启es即可。
IK分词器有两种:
分词器 | 标识 | 描述 | 分词对象 | 结果 |
---|---|---|---|---|
ik_smart | ik_smart | ik分词器中的简单分词器,支持自定义字典,远程字典 | 今天星期一 | [今天,星期一] |
ik_max_word | ik_max_word | ik_分词器的全量分词器,支持自定义字典,远程字典 | 学如逆水行舟 | [今天,星期一,星期,一 ] |
三、本地自定义
在 es/plugins/ik/config 目录下,新建 ext.dic 文件(文件名任意),在该文件中可以配置自定义的词库。
添加自定义的词:
然后配置扩展词典的位置:
vim IKAnalyzer.cfg.xml
最后重启ES即可。
四、远程词库
也可以配置远程词库,远程词库支持热更新(不用重启 es 就可以生效)。
热更新只需要提供一个接口,接口返回扩展词即可。
具体使用方式如下,新建一个 Spring Boot 项目,引入 Web 依赖即可。然后在 resources/stastic 目录下新建 ext.dic 文件,写入扩展词:
接下来,在 es/plugins/ik/config/IKAnalyzer.cfg.xml 文件中配置远程扩展词接口:
配置完成后,重启 es ,即可生效。
热更新,主要是响应头的 Last-Modified 或者 ETag 字段发生变化,ik 就会自动重新加载远程扩展。
总结
以上就是ES涉及到的分词器支持情况,更多详情可以查看官网。