• 十二、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_视频

    今天的学习是为了以后的工作更加的轻松!
  • 相关阅读:
    有赞个性化推荐能力的演进与实践
    Doge.jpg 的背后是什么,你知道么?
    实操|如何将 Containerd 用作 Kubernetes runtime
    Linux 用键盘操作窗口
    Oracle中join left,join right,inner join,(+) 等
    sql之left join、right join、inner join的区别
    SQL中GROUP BY的用法
    Oracle CASE WHEN 用法介绍
    Oracle数据库面试题
    Oracle笔试题库之问答题篇-总共60道
  • 原文地址:https://www.cnblogs.com/tz90/p/15227088.html
Copyright © 2020-2023  润新知