• Elasticsearch分词器-中文分词器ik



    ES官方文档Text Analysis

    使用standard analysis对英文进行分词

    ES默认使用standard analysis;如下可以使用POST _analyze测试standard analysis是如何分词的

    POST _analyze
    {
      "analyzer": "standard",
      "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    该API会将文本内容分词成如下单词

    [ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog's, bone ]
    
    • 1

    使用standard analysis对中文进行分词

    默认的 standard analysis 对每个汉字进行了分词,显然这不是我们所期望
    在这里插入图片描述

    安装插件对中文进行友好分词-ik中文分词器

    下载安装和配置IK分词器

    1、下载ik分词器
    gitHub下载地址,找到和当前ES匹配的版本,ik的版本是跟着ES走的。
    2、使用wget命令下载zip包
    也不局限于这一种方式,只要能把zip下载并上传到服务器上怎么样都行

    wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.14.0/elasticsearch-analysis-ik-7.14.0.zip
    
    • 1

    3、在plugins目录下创建ik文件夹,unzip命令进行解压到ES的plugins/ik目录

    # 将zip包解压到指定的目录/home/es-kibana/volume/plugin/ik下,并不覆盖已有的文件
    unzip -n elasticsearch-analysis-ik-7.14.0.zip -d /home/es-kibana/volume/plugins/ik
    
    • 1
    • 2

    因为本人使用Docker安装ES,并在docker run的时候将plugins挂载到了宿主机的 /home/es-kibana/volume/plugins目录下;所以就直接在该目录下创建ik文件夹,并执行上面的解压命令
    4、进入容器内部查询plugin list,确认ik安装成功

    # 进入容器内部
    [root@VM-8-3-opencloudos ik]# docker exec -it b72e9104d50a /bin/bash
    # 也可以先看看宿主机plugins目录下的东西是否成功映射给容器内的plugins
    [root@b72e9104d50a elasticsearch]# ls
    bin  config  data  jdk	lib  LICENSE.txt  logs	modules  NOTICE.txt  plugins  README.asciidoc
    # 进入bin,查看plugin列表
    [root@b72e9104d50a bin]# elasticsearch-plugin list
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    5、重新启动ES

    6、前往kibana的控制台进行中文分词验证
    ik提供了两种分词器

    • ik_smart
    • ik_max_word

    使用ik_smart分词器

    下图是使用ik_smart分词器的结果,显示将‘我是中国人’分词为[‘我’,‘是’,‘中国人’]
    在这里插入图片描述

    使用ik_max_word分词器

    下面尝试使用ik_max_word分词器进行中文分词,它将‘我是中国人’这句中文进行最大限度的分词;结果为[‘我’,‘是’,‘中国人’,‘中国’,‘国人’]
    在这里插入图片描述

    借助Nginx实现ik分词器自定义分词网络新词

    上面在ES中安装使用ik分词器完成了中文分词;但是在日常的生活中不断地会涌出各种各样新奇的网络热词,比如”尊嘟假嘟“、”绝绝子“、”爷青回“、”乔碧萝殿下“等等;这些词汇在ik中不存在,便会逐字分词;如果期望这些新兴的网络热词按照自己的意思进行分词该如何操作?如下图的效果这样
    在这里插入图片描述
    在这里插入图片描述
    思路:ik的配置文件IKAnalyzer.cfg.xml中支持自定义配置远程扩展字典;将Nginx作为远程扩展字典
    在这里插入图片描述

    • 自定义静态资源文件ik_analyze.txt;用来收录网络新词
    • 保证网络能正常访问ik_analyze.txt静态资源
    • 将ik_analyze.txt静态资源的访问路径配置给IKAnalyzer.cfg.xml文件中的entry标签

    第一步、使用Nginx作为Ik的扩展分词库
    首先保证Nginx可以正常访问;接着在Nginx的静态资源目录/html下自定义文件用来收录新词
    在这里插入图片描述
    并且该静态资源可以正常访问,如下图所示
    在这里插入图片描述
    第二步、配置ik的远程扩展字典
    ik插件安装在ES的plugins目录下,在该目录下可以进入config目录,就可以看到IKAnalyzer.cfg.xml文件
    在这里插入图片描述
    对其进行编辑,如下;将ik_analyze.txt资源的访问路径配置其中即可
    在这里插入图片描述
    第三步、进行验证,可以看到”乔碧萝殿下“分词为[“乔碧萝”,“殿下”]

    POST _analyze
    {
      "analyzer": "ik_max_word",
      "text": "乔碧萝殿下"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

  • 相关阅读:
    Nginx搭建Rtmp流媒体服务,并使用Ffmpeg推流
    2022-08-19 第六小组 瞒春 学习笔记
    Oracle数据库环境变量配置以及可能遇到的问题解决
    863. 二叉树中所有距离为 K 的结点
    损失函数总结(三):BCELoss、CrossEntropyLoss
    【Git学习三】git中的分支管理:git branch,git checkout,解决git中的分支冲突的方法
    vuex基础教学(1)
    04 【折线图】
    华为交换机vlan划分、telnet 管理地址配置
    Kotlin协程的简单用法(GlobalScope、lifecycleScope、viewModelScope)
  • 原文地址:https://blog.csdn.net/weixin_43859011/article/details/134023844