十二、ES分词器
一、ES分词介绍
我们使用搜索引搜索我们想要查询的内容时,ES数据库会对我们输入的内容进行分词,再按分词的评分进行排序,优先显示评分高的内容。
如在某宝搜索双飞燕蓝牙无线鼠标
,某宝的搜索引擎就可能会将该内容分为双飞燕
,蓝牙
,无线
,鼠标
,并将评分高的结果优先显示。
如上图,双飞燕就跟无线蓝牙鼠标分开了,这就是分词
因为默认的ES分词器对中文支持不是很好,这里需要使用elasticsearch-analysis-ik
插件来对中文进行分词。
二、使用分词插件
1、使用前提
- 所有es节点都需要安装插件
- 安装完后需要重启服务
- 插件版本要和es版本号对应
环境介绍
主机名 | 服务 | IP |
---|---|---|
es01 | es+kibana | 10.154.0.110 |
es02 | es | 10.154.0.111 |
es03 | es | 10.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的索引,并指定分词器
右边的红色字体警告,告诉我们有一个参数即将过时,可以忽略该警告
analyzer:创建索引使用的分词器
search_analyzer:查询时使用的分词器
参考资料:analyzer和search_analyzer的区别
插入测试数据
搜索有关中国
的关键词
3、使用字典
有时候我们对中文分词效果不满意,可以自己写词库或者更新词库
安装nginx
yum -y install nginx
systemctl enable nginx
systemctl start nginx
编辑字典文件
vim /usr/share/nginx/html/zh_dic.txt
中国
知名品牌
双飞燕无线鼠标
蓝牙鼠标
无线鼠标
保证能访问
配置到es的中文分词器插件配置文件中
vim /etc/elasticsearch/analysis-ik/IKAnalyzer.cfg.xml
编辑第10行,修改为字典路径
将改好的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的默认分词器对中文不是很友好,会将搜索词分成一个字一个字的。
创建一个china2索引,指定中文分词器插件,插入测试数据,搜索双飞燕
可以发现双飞燕
被完整的分开,这就是自建字典的分词效果,以后需要更新字典,直接编辑字典即可,非常方便。
PS,双飞燕看见了请付一下广告费谢谢!哈哈
参考资料
老男孩教育_day105_视频