十二、ES分词器

摘要:
如上图所示,双飞燕与无线蓝牙鼠标分离,这是分词。因为默认的ES分词设备不太支持中文,所以我们需要使用弹性搜索分析ik插件来分割中文单词。可以发现,“双飞燕”一词是一个字一个字分开的。es的默认分词设备对中文不太友好,会将搜索词分成单词。

一、ES分词介绍

我们使用搜索引搜索我们想要查询的内容时,ES数据库会对我们输入的内容进行分词,再按分词的评分进行排序,优先显示评分高的内容。

如在某宝搜索双飞燕蓝牙无线鼠标,某宝的搜索引擎就可能会将该内容分为双飞燕蓝牙无线鼠标,并将评分高的结果优先显示。
十二、ES分词器第1张

如上图,双飞燕就跟无线蓝牙鼠标分开了,这就是分词

因为默认的ES分词器对中文支持不是很好,这里需要使用elasticsearch-analysis-ik插件来对中文进行分词。

二、使用分词插件

1、使用前提

  • 所有es节点都需要安装插件
  • 安装完后需要重启服务
  • 插件版本要和es版本号对应

环境介绍

主机名服务IP
es01es+kibana10.154.0.110
es02es10.154.0.111
es03es10.154.0.112

1、下载安装

下载地址:github下载

我的ES使用的是7.9.3的版本,建议使用离线安装,将安装包下载下来,再上传到服务器中。

#在线安装
/usr/share/elasticsearch/bin/elasticsearch-plugin install \
https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.9.3/elasticsearch-analysis-ik-7.9.3.zip

#离线安装
/usr/share/elasticsearch/bin/elasticsearch-plugin install \
file:///opt/elasticsearch-analysis-ik-7.9.3.zip

传到其他es服务器

#这里的es02,es03是在/etc/hosts文件配置的域名
scp elasticsearch-analysis-ik-7.9.3.zip es02:/opt
scp elasticsearch-analysis-ik-7.9.3.zip es03:/opt

重启所有节点

systemctl restart elasticsearch

2、使用插件

创建一个名为china的索引,并指定分词器
十二、ES分词器第2张

右边的红色字体警告,告诉我们有一个参数即将过时,可以忽略该警告
analyzer:创建索引使用的分词器
search_analyzer:查询时使用的分词器

参考资料:analyzer和search_analyzer的区别

插入测试数据
十二、ES分词器第3张

搜索有关中国的关键词
十二、ES分词器第4张

3、使用字典

有时候我们对中文分词效果不满意,可以自己写词库或者更新词库

安装nginx

yum -y install nginx
systemctl enable nginx
systemctl start nginx

编辑字典文件

vim /usr/share/nginx/html/zh_dic.txt
中国
知名品牌
双飞燕无线鼠标
蓝牙鼠标
无线鼠标

保证能访问
十二、ES分词器第5张

配置到es的中文分词器插件配置文件中

vim /etc/elasticsearch/analysis-ik/IKAnalyzer.cfg.xml

编辑第10行,修改为字典路径
十二、ES分词器第6张

将改好的IK配置文件复制到其他节点

scp -p /etc/elasticsearch/analysis-ik/IKAnalyzer.cfg.xml es02:/etc/elasticsearch/analysis-ik/IKAnalyzer.cfg.xml
scp -p /etc/elasticsearch/analysis-ik/IKAnalyzer.cfg.xml es03:/etc/elasticsearch/analysis-ik/IKAnalyzer.cfg.xml

重启所有节点

systemctl restart elasticsearch

#边重启边查看es01的集群日志会发现字典已被加载
tail -f /var/log/elasticsearch/tz_linux_es.log 

如果用的是xshell,点击工具>发送键输入到所有会话,即可将当前会话输入的命令输入到所有会话中,非常好用

启动es01的kibana

systemctl start kibana

进入kibana的控制台,创建china索引,插入测试数据,搜索双飞燕,这里创建索引没有指定分词器,会用es默认的分词器。
十二、ES分词器第7张
可以发现双飞燕这个词被一个字一个字分开了,es的默认分词器对中文不是很友好,会将搜索词分成一个字一个字的。

创建一个china2索引,指定中文分词器插件,插入测试数据,搜索双飞燕
十二、ES分词器第8张
可以发现双飞燕被完整的分开,这就是自建字典的分词效果,以后需要更新字典,直接编辑字典即可,非常方便。

PS,双飞燕看见了请付一下广告费谢谢!哈哈

参考资料
老男孩教育_day105_视频

免责声明:文章转载自《十二、ES分词器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇maven新建项目的几种方式和启动五大好用的开源MySQL管理工具推荐下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

lucene.net 详解

转自:http://www.360doc.com/content/09/0216/17/32573_2562131.shtml 1 lucene简介1.1 什么是luceneLucene是一个全文搜索框架,而不是应用产品。因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品。1.2 ...

Java API操作ES

Java API操作ES Elastic Search软件是由Java语言开发的,所以也可以通过Java API的方法对Elastic Search服务进行访问。 1. 引入POM文件 <properties> <elasticsearch.version>7.6.2</elasticsearch.ve...

elasticsearch 性能优化

转载: https://www.cnblogs.com/jajian/p/10465519.html 硬件选择 Elasticsearch(后文简称 ES)的基础是 Lucene,所有的索引和文档数据是存储在本地的磁盘中,具体的路径可在 ES 的配置文件../config/elasticsearch.yml中配置,如下: # ---------------...

使用SQL语句查询Elasticsearch索引数据

Elasticsearch 的官方查询语言是 Query DSL,存在毕竟有存在的道理,存在即合理。SQL 作为一个数据库查询语言,它语法简洁,书写方便而且大部分服务端程序员都清楚了解和熟知它的写法。但是作为一个 ES 萌新来说,就算他已经是一位编程界的老江湖,但是如果他不熟悉 ES ,那么他如果要使用公司已经搭好的 ES 服务,他必须要先学习 Query...

JVM 的 Xms 和 Xmx 设置一样大小的内存容量

4. 【推荐】在线上生产环境,JVM 的 Xms 和 Xmx 设置一样大小的内存容量,避免在 GC 后调整堆 大小带来的压力。 现在,我们知道了Elasticsearch所公开的缓存和缓冲区,可以尝试结合这些知识来配置一个高索引和查询吞吐量的集群。接下来的两个小节将讨论在设置集群时,什么可以在默认配置中更改,什么是要注意的。在讨论Elasticsearch...

几篇关于MySQL数据同步到Elasticsearch的文章---第三篇:logstash_output_kafka:Mysql同步Kafka深入详解

文章转载自:https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484411&idx=1&sn=1f5a371095d61bd0d6461ed111dd252b&chksm=eaa82bd3dddfa2c5b08831bfd4221178b277f03ec74e...