• ElasticSearch系列——分词器


    分词器

    分词和分词器

    Analysis∶文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词
    Analysis是通过Analyzer来实现的。分词就是将文档通过Analyzer分成一个一个的Term,每一个Term都指向包含这个Term的文档。

    分词器的组成

    1. character filters(字符过滤器) : 在文本进行过滤前需要先进行预先处理
    2. tokenizers(分词器) : 对词句进行响应的分词
    3. token filter(token过滤器) : 将切分的单词进行加工,如大小写转化,去除介词等

    在ES中默认会使用标准分词器standardAnalyer,其中英语会进行单词分词,中文则是单字分词

    分词顺序

    character filter ===> tokenizers ===> token filter

    构成数量

    character filter(大于等于0) ===> tokenizers(至少有1个) ===> token filter(大于等于0)

    ES中的分词器

    1. Standard Analyzer : 默认分词器,小写处理
    2. Simple Analyzer-按照单词切分(符号被过滤),小写处理,中文按照空格进行分词
    3. Stop Analyzer -小写处理,停用词过滤(the,a,is)
    4. Whitespace Analyzer-按照空格切分,不转小写
    5. Keyword Analyzer-不分词,直接将输入当作输出

    测试分词器

    其中将standard修改为你要测试的即可

    # 分词器
    POST /_analyze
    {
      "analyzer": "standard",
      "text": "你好我是张三 i am very happy"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    指定分词器

    分词器需要在指定映射的时候进行设置

    #设置分词器
    PUT /analy
    {
      "mappings": {
        "properties": {
          "name":{
            "type": "text",
            "analyzer": "standard"
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    IK分词器(中文分词)

    https://github.com/medcl/elasticsearch-analysis-ik
    在这里插入图片描述
    需要我们注意的是IK分词词需要和你的ES版本相同
    下载完后解压缩放入ES的/plugins目录下
    在这里插入图片描述然后我们重启一下

    测试使用IK分词器

    ik分词器叫做ik_smartik_max_word他们俩在文本的拆分力度上有所不同,后者更加细致

    # IK分词器
    POST /_analyze
    {
      "analyzer": "ik_smart",
      "text": "你好我是张三 i am very happy"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这里可以看到对中文的分词已经出来了
    在这里插入图片描述

    IK分词器自定义扩展词和停用词IK支持自定义扩展词典和停用词典

    • 扩展词典:就是有些词并不是关键词,但是也希望被ES用来作为检索的关键词,可以将这些词加入扩展词典。
    • 停用词典:就是有些词是关键词,但是出于业务场景不想使用这些关键词被检索到,可以将这些词放入停用词典。

    我们可以直接去config/IKAnalyzer.cfg.xml文件中进行定义,你问我怎么知道的?人家README里写的

    在这里插入图片描述
    在这里插入图片描述

    1. 修改xml文件

    我们在扩展词典的配置中设置我们扩展词典的文件叫做self_ext.dic,这样我们就配置好了扩展词典的位置
    在这里插入图片描述

    2.创建扩展词典文件

    由于我们现在只是配置了扩展词典的名字,但是实际上我们还没有这个词典,所以我们要对应创建出来

    在这里插入图片描述

    3.编写扩展词典

    如下我们编辑self_ext.dic文件,这里注意扩展词只能每行写一个
    我这里设置了张三,李四,王五作为扩展词
    在这里插入图片描述

    4.重启ES

    5.测试扩展词

    POST /_analyze
    {
      "analyzer": "ik_smart",
      "text": "你好我是张三李四王五 i am very happy"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    当然停用词也是一样
    但是推荐大家直接使用定义好的扩展词和停用词

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
    	<comment>IK Analyzer 扩展配置</comment>
    	<!--用户可以在这里配置自己的扩展字典 -->
    	<entry key="ext_dict">extra_main.dic</entry>
    	 <!--用户可以在这里配置自己的扩展停止词字典-->
    	<entry key="ext_stopwords">extra_stopword.dic</entry>
    	<!--用户可以在这里配置远程扩展字典 -->
    	<!-- <entry key="remote_ext_dict">words_location</entry> -->
    	<!--用户可以在这里配置远程扩展停止词字典-->
    	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
    </properties>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

  • 相关阅读:
    三菱PLC单轴运动控制
    数据结构-排序
    人工智能前沿——2022年最流行的十大AI技术
    华为云云耀云服务器L实例评测 | 搭建企业级 Registry 服务器 Harbor
    B站app作品列表sign
    sql训练01
    TCP/IP--MAC地址详解——保证你能看懂
    【UCIe】UCIe Lane Reversal 介绍
    成型vue3项目引入electron通信
    bclinux aarch64 ceph 14.2.10 云主机 4节点 fio
  • 原文地址:https://blog.csdn.net/qq_51553982/article/details/127756533