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

这篇具有很好参考价值的文章主要介绍了【手把手】ElasticSearch的分词器相关。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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也是非常简单粗暴的按照每一个汉字来进行切割,这就很难受了

虽然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分词器查看分词效果:

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.toymoban.com/news/detail-451208.html

到了这里,关于【手把手】ElasticSearch的分词器相关的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手把手教学RRT*(RRTSTAR)三维算法MATLAB仿真(代码可直接运行,视频手把手教学)

            在我以前的作品里有关于RRT算法的视频和代码,今天主要讲解一下RRT*算法的原理。RRT*算法主要是在RRT算法的基础上加上了重写父节点和随机重连的两个步骤。具体的实现方式我想以视频的方式向大家讲解,个人感觉讲解的十分详细。视频连接在这里,希望大家看

    2024年04月17日
    浏览(33)
  • 【算法】手把手学会BFS

    目录 简介 层序遍历 例题 献给阿尔吉侬的花束 全球变暖 🍦宽度优先搜索算法(又称广度优先搜索)是 最简便的图的搜索算法之一 ,之前我们在实现对树的层序遍历时就使用过它。不仅如此它还在求最短路径,找连通块时具有奇效。 🍦层序遍历基本上借助于队列,将队头

    2023年04月09日
    浏览(82)
  • 手把手pip安装教程

    在Python中,pip是最常用的包管理工具之一。它可以用于安装、卸载和管理Python包。在本文中,我们将手把手教你如何安装pip,以便能够更方便地安装和管理Python包。 在安装pip之前,我们需要确认已经正确安装了Python,并确定其版本。在命令行中输入以下命令,确认Python版本:

    2024年02月11日
    浏览(46)
  • 手把手实现一个lombok

    什么是JSR ? JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。 有超过300的JSR。一些更为明显的JSRs包括: 的JSR# 规格或技术 1 实时规范为Jav

    2023年04月23日
    浏览(34)
  • 【算法】手把手学会二分查找

    目录 简介 基本步骤 第一种二分 第二种二分  例题 搜索插入位置 数的范围 总结  🥥二分查找,又叫折半查找,通过找到数据二段性每次都能将原来的数据筛选掉一半,通过这个算法我们能够将一个一个查找的  O(n)  的时间复杂度优化到  O(logn)  ,极大地提升了查找的效率

    2023年04月08日
    浏览(29)
  • tps5430手把手教学

    TPS5430手把手教学 目录 一、buck电路原理 二、tps5430芯片介绍 1.1芯片引脚图 1.2芯片引脚说明 三、tps5430参考电路讲解以及PCB布局 1.正压降压(15V转12V) 1.1原理图 1.2器件选择 1.3PCB布局 2.正压降负压 2.1原理图 2.2PCB布局 2.3注意事项 BUCK电路原理: BUCK电路,又称降压式变换电路,

    2023年04月20日
    浏览(43)
  • 【算法】手把手学会前缀和

    目录 前缀和 前缀和的好处 公式的推导 例题:前缀和 二维前缀和 推导公式  例题: 子矩阵的和 🎵前缀和算法可以理解为是一种 以空间换时间的方式 ,通过建立一个新的数组来 存储从头到当前位置的数据的总和 。 初始化数组  🎵前缀和数组的初始化就是将前  i  个数存

    2024年01月17日
    浏览(29)
  • WebSocket---搭建与使用(手把手)

    WebSocket是一种在客户端和服务器之间进行实时双向通信的协议。与传统的HTTP请求-响应模式不同,WebSocket允许 服务器主动向客户端发送消息 ,而不需要客户端发起请求。这种实时通信的特性使得WebSocket非常适合于需要实时更新数据的应用,如聊天室、实时游戏、股票市场等。

    2024年02月02日
    浏览(31)
  • 手把手教你SHA-256

    SHA-256是SHA-2协议簇的一部分,也是当前最流行的协议算法之一。在本篇文章中,我们会了解这个密码学算法的每一个步骤,并且通过实例演示。SHA-2因它的安全性(比SHA-1强很多)和速度为人所知。在没有键(keys)生成的情况下,例如挖掘比特币,像SHA-2这样的快速哈希算法很

    2024年02月13日
    浏览(57)
  • 手把手教你暴力破解

    暴力破解是一种攻击手段,使用大量的认证信息在认证接口尝试登录,直到得到正确的结果。 2.1标题基于表单的暴力破解 2.1.1 第一步:打开burpsuite拦截 2.1.2 第二步:将拦截到的包右击发送到intruder模块 (其中简单介绍一下intruder模块) Target主要是设置暴力破解访问的host地址

    2024年02月07日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包