【手把手】ElasticSearch的分词器相关

导读:本篇文章讲解 【手把手】ElasticSearch的分词器相关,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

normalization 规范化

【手把手】ElasticSearch的分词器相关【手把手】ElasticSearch的分词器相关【手把手】ElasticSearch的分词器相关

不同的分词器对词语的切分也不一样。

character filter 字符过滤器

分词之前的预处理,过滤无用字符

HTML Strip

【手把手】ElasticSearch的分词器相关

自定义字符过滤器my_analyzer,作用是过滤数据中的html标签

【手把手】ElasticSearch的分词器相关

可使用“escaped_tags”:[“a”]设置保留不被过滤的标签

【手把手】ElasticSearch的分词器相关【手把手】ElasticSearch的分词器相关

Mapping

【手把手】ElasticSearch的分词器相关【手把手】ElasticSearch的分词器相关

通过自定义的过滤器,可以将聊天、留言或者弹幕之类的发言根据需求进行屏蔽或替换。

Pattern Replace

【手把手】ElasticSearch的分词器相关【手把手】ElasticSearch的分词器相关

通过正则表达式进行数据的替换。

token filter 令牌过滤器

停用词、时态转换、大小写转换、同义词转换、语气词处理等。

【手把手】ElasticSearch的分词器相关【手把手】ElasticSearch的分词器相关

可以看到”东邪”检索到”黄药师”的分词,”西毒”检索到”欧阳锋”的分词。

除了自定义的以外,也可以使用ES自带的,比如大小写的转换: 

【手把手】ElasticSearch的分词器相关【手把手】ElasticSearch的分词器相关

甚至可以通过自定义脚本动态的控制过滤逻辑,比如将长度大于5的字符串转为全大写:

【手把手】ElasticSearch的分词器相关

也可以将一些语句中没有什么意义的语气词等作为停用词不参与检索:

【手把手】ElasticSearch的分词器相关【手把手】ElasticSearch的分词器相关

也可以将一些语句中不管有没有意义所有的词都不作为停用词参与检索:

【手把手】ElasticSearch的分词器相关

当然也可以手动自定义去设置那些词作为停用词使用:

【手把手】ElasticSearch的分词器相关

tokenizer 分词器

其实在上面的过程中一直都在使用分词器,ES中默认的分词器是standard。这个分词器在切词的时候是基于英文的空格去切分,对于英文检索来说简单粗暴,直接好用。

【手把手】ElasticSearch的分词器相关

但是对于中文来说,standard也是非常简单粗暴的按照每一个汉字来进行切割,这就很难受了

【手把手】ElasticSearch的分词器相关

虽然ES官方提供了很多个分词器,其实对于中文的支持都不好用:

standard:默认分词器,中文会逐字拆分;

pattern:以正则匹配分隔符,把文本拆分成若干词项;

simple pattern:以正则匹配词项,速度比pattern会快一些;

whitespace:以空白符分隔,把文本拆分成若干词项;

既然官方提供的不好用,那就得自己手动来自定义分词器:

char_filter:内置或自定义字符过滤器;

token_filter:内置或自定义token过滤器;

tokenizer:内置或自定义分词器;

【手把手】ElasticSearch的分词器相关

值得一提的是my_tokenizer的设置,”pattern”: “[,.!;?]”指的是文本会按照[]中有的符号去切割

【手把手】ElasticSearch的分词器相关

ES安装IK分词器 

进入到ES的根目录下的插件目录下,下载IK分词器安装包

cd /usr/local/source/elasticsearch-7.10.0/plugins/

mkdir ik

cd ik/

wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.10.0/elasticsearch-analysis-ik-7.10.0.zip

【手把手】ElasticSearch的分词器相关

解压IK分词器安装包,重启ES服务

unzip elasticsearch-analysis-ik-7.10.0.zip

rm -rf elasticsearch-analysis-ik-7.10.0.zip

cd ../../bin/

./elasticsearch

【手把手】ElasticSearch的分词器相关

指定使用IK分词器查看分词效果:

【手把手】ElasticSearch的分词器相关

ik_max_word对文本的分词粒度比较小

【手把手】ElasticSearch的分词器相关

ik_smart对文本的分词粒度比较小

根据IK分词器官方提供的文档,提供了两个analyzer和两个tokenizer,都是ik_smart和ik_max_word。

IK文件描述

IKAnalyzer.cfg.xml:IK分词器配置文件

【手把手】ElasticSearch的分词器相关

main.dic:IK分词器主词库,也是IK最大的词库,收录了20多万常用的汉语词汇

【手把手】ElasticSearch的分词器相关

stopword.dic:英文停用词库,不会建立在倒排索引中

【手把手】ElasticSearch的分词器相关

quantifier.dic:特殊词库,计量单位

【手把手】ElasticSearch的分词器相关

suffix.dic:特殊词库,行政、地理单位

【手把手】ElasticSearch的分词器相关

surname.dic:特殊词库,百家姓

【手把手】ElasticSearch的分词器相关

preposition.dic:特殊词库,语气词

【手把手】ElasticSearch的分词器相关

当某些文本无法被正确分词,可以自定义分词

【手把手】ElasticSearch的分词器相关

vim custom.dic

【手把手】ElasticSearch的分词器相关

vim customstopword.dic

【手把手】ElasticSearch的分词器相关

vim IKAnalyzer.cfg.xml

【手把手】ElasticSearch的分词器相关

重启ES服务

【手把手】ElasticSearch的分词器相关【手把手】ElasticSearch的分词器相关

热更新

基于远程词库的热更新

每次在修改完IK分词器的配置文件之后,都需要对ES服务进行重新启动

【手把手】ElasticSearch的分词器相关

现在每天网络热门词汇层出不穷,按照词汇更新的速度频率经常重启ES服务显示是不可能的。在新版本中,IK分词器官方可以支持配置远程扩展字典和扩展停止词字典:

【手把手】ElasticSearch的分词器相关

并且官方也提供了非常详细的使用步骤说明:

【手把手】ElasticSearch的分词器相关

下面就按照官方提供的教程来试试:

先定义好热词文件和停用词文件:

【手把手】ElasticSearch的分词器相关

写段代码给读出来看看:

【手把手】ElasticSearch的分词器相关

【手把手】ElasticSearch的分词器相关【手把手】ElasticSearch的分词器相关

修改IK分词器配置文件:

【手把手】ElasticSearch的分词器相关

重启ES服务

【手把手】ElasticSearch的分词器相关

验证分词器是否可以远程读词

【手把手】ElasticSearch的分词器相关

给热词文件新增一个热词

【手把手】ElasticSearch的分词器相关

ES服务在未重启的基础上有读取到新增的热词

【手把手】ElasticSearch的分词器相关

【手把手】ElasticSearch的分词器相关

基于MySQL数据库的热更新

使用静态文件加远程访问的形式进行热词更新,虽然上手比较简单,但是缺点也非常明显:

1、词库的管理很不方便,必须直接操作磁盘文件,检索页很麻烦;

2、文件的读写没有专门的优化,词汇量大的情况下性能是个问题;

3、多一层接口的调用和网络传输;

IK访问MySQL数据库驱动下载:

https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-versions.html
https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-versions.html

IK分词器下载地址:

https://github.com/medcl/elasticsearch-analysis-ik/(下载未经编译的.tar.gz压缩包)

在加载词典的方法中,添加一个连接数据库,从数据库中查询词语的操作即可。

​​​​​​​

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/111909.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!