• ElasticSearch(六)【分词器】


    六、分词器


    6.1 分词器介绍

    Analysis 和 Analyzer

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

    Analyzer 组成

    注意】:在ES中默认使用标准分词器:StandardAnalyzer特点:中文单字分词/单词分词
    我是中国人this is a good man---->analyzer—>我 是 中 国 人 this is a good man

    • 分析器(analyzer)都由三种构件组成的:character filterstokenizerstoken filters
      • Character Filter 字符过滤器
        • 在一段文本进行分词之前,先进行预处理,比如说最常见的就是,过滤html标签(hello–> hello),&–> and,(I&you–>I and you)
      • Tokenizers 分词器
        • 英文分词可以根据空格将单词分开,中文分词比较复杂,可以采用机器学习算法来分词
      • Token Filters Token过滤器
        • 将切分的单词进行加工。大小写转换(例将"Quick"转为小写),去掉停用词(例如停用词像"a"、“and”、“the"等等),加入同义词(例如同义词像"jump"和"leap”)

    注意

    • 三者顺序:Character Filter—>Tokenizers—>Token Filter
    • 三者个数:Character Filter(0个或多个)+ Tokenizers + Token Filters(0个或多个)

    内置分词器

    • Standard Analyzer:默认分词器,英文按单词切分,并小写处理
    • Simple Analyzer:按照单词切分(符号被过滤),小写处理
    • Stop Analyzer:小写处理,停用词过滤(the、a、is…)
    • Whitespace Analyzer:按照空格切分,不转小写
    • Keyword Analyzer:不分词,直接将输入当作输出

    6.2 内置分词器测试

    • Standard Analyzer 标准分词器
      • 特点:按照单词分词,英文统一转为小写,过滤标点符号,中文单子分词
    POST /_analyze
    {
      "analyzer": "standard",
      "text": "我是中国人, this is a good Man"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    • Simple Analyzer 简单分词器
      • 特点:按照单词分词,英文统一转为小写,过滤标点符号,中文不分词(按照"空格"或标点符号分词)
    POST /_analyze
    {
      "analyzer": "simple",
      "text": "我是,中国人, this is a good Man"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    • WhitespaceAnalyzer 空格分词器
      • 特点:中文、英文按照空格分词,英文不会转为小写,不去掉标点符号
    POST /_analyze
    {
      "analyzer": "whitespace",
      "text": "我是中国人, this is a good Man"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    • Keyword Analyzer 关键词分词器
      • 特点:将输入的内容当作一个关键词
    POST /_analyze
    {
      "analyzer": "keyword",
      "text": "我是中国人, this is a good Man"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    6.3 创建索引设置分词

    # 创建时,默认使用标准分词器 "analyzer": "standard"
    PUT /analyzer
    {
      "settings": {},
      "mappings": {
        "properties": {
          "title": {
            "type": "text",
            "analyzer": "standard"
          }
        }
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    6.4 中文分词器

    在ES中支持中文分词器非常多,如smartCN、IK等,这里推荐使用IK分词器

    安装IK

    github网站:https://github.com/medcl/elasticsearch-analysis-ik

    注意

    • IK分词器的版本要与安装ES的版本一致
    • Docker容器运行ES安装插件目录为/usr/share/elasticsearch/plugins
    # 1.下载对应版本到本地
    wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.14.0/elasticsearch-analysis-ik-7.14.0.zip
    
    # 2.解压(建议本地下载之后,手动解压,再使用xftp将解压后的文件上传到linux)
    unzip elasticsearch-analysis-ik-6.2.4.zip ik-7.14.0	(如果没有unzip命令,先使用"yum install -y unzip"进行安装)
    
    # 3.移动到es安装目录的plugis目录中(不推荐使用,如果是手动解压,可以忽略此步骤往下看)
    mv ik-7.14.0 elasticsearch-analysis-ik-6.2.4/plugins/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    使用数据卷挂载的方式

    # 1.先停止对应docker容器
    docker-compose down
    
    # 2.修改docker-compose.yml文件,如下图所示
    # 将当前的路径下的ik-7.14.0文件映射到容器内部中的/usr/share/elasticsearch/plugins/ik-7.14.0文件,同时删除volumes下的plugin
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    ############################################### 内容如下 ###############################################
    version: "3.8"
    volumes:
      data:
      config:
    networks:
      es:
    services:
      elasticsearch:
        image: elasticsearch:7.14.0
        ports:
          - "9200:9200"
          - "9300:9300"
        networks:
          - "es"
        environment:
          - "discovery.type=single-node"
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        volumes:
          - data:/usr/share/elasticsearch/data
          - config:/usr/share/elasticsearch/config
          - ./ik-7.14.0:/usr/share/elasticsearch/plugins/ik-7.14.0
    
      kibana:
        image: kibana:7.14.0
        ports:
          - "5601:5601"
        networks:
          - "es"
        volumes:
          - ./kibana.yml:/usr/share/kibana/config/kibana.yml
    
    ###############################################  ###############################################
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    6.5 IK使用

    IK有两种颗粒度的拆分

    • ik_smart:会做粗粒度的拆分
    • ik_max_word:会将文本做最细粒度的拆分

    ik_smart测试

    POST /_analyze
    {
      "analyzer": "ik_smart",
      "text": "中华人民共和国国歌"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    ik_max_word测试

    POST /_analyze
    {
      "analyzer": "ik_max_word",
      "text": "中华人民共和国国歌"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    下一篇文章ElasticSearch - 扩展词、停用词配置

  • 相关阅读:
    查询指定博物馆 易语言代码
    Linux学习资源Index
    减压二十六式
    第32讲:K8S集群与Cephfs文件系统集成
    Axure 学习过程中主动学习很重要
    [De1CTF2019]Babylfsr
    合作动态 | 方正璞华与日立签订战略合作协议,加快推进数字化管理变革!
    Unity内实现无卡顿取图像推流/截屏等功能
    新风机小助手-风压变速器
    【Linux】部署单体项目以及前后端分离项目(项目部署)
  • 原文地址:https://blog.csdn.net/Wei_Naijia/article/details/126923442