• Elasticsearch(10) --- 内置分词器、中文分词器


    内置分词器、中文分词器

    这篇博客主要讲:分词器概念ES内置分词器ES中文分词器

    一、分词器概念

    1、Analysis 和 Analyzer

    Analysis: 文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词。Analysis是通过Analyzer来实现的

    当一个文档被索引时,每个Field都可能会创建一个倒排索引(Mapping可以设置不索引该Field)。

    倒排索引的过程就是将文档通过Analyzer分成一个一个的Term,每一个Term都指向包含这个Term的文档集合。

    当查询query时,Elasticsearch会根据搜索类型决定是否对query进行analyze,然后和倒排索引中的term进行相关性查询,匹配相应的文档。

    2 、Analyzer组成

    分析器(analyzer)都由三种构件块组成的:character filterstokenizerstoken filters

    1) character filter 字符过滤器

    在一段文本进行分词之前,先进行预处理,比如说最常见的就是,过滤html标签(<span>hello<span> --> hello),& --> and(I&you --> I and you)
    

    2) tokenizers 分词器

    英文分词可以根据空格将单词分开,中文分词比较复杂,可以采用机器学习算法来分词。

    3) Token filters Token过滤器

    将切分的单词进行加工。大小写转换(例将“Quick”转为小写),去掉词(例如停用词像“a”、“and”、“the”等等),或者增加词(例如同义词像“jump”和“leap”)。

    三者顺序Character Filters--->Tokenizer--->Token Filter

    三者个数analyzer = CharFilters(0个或多个) + Tokenizer(恰好一个) + TokenFilters(0个或多个)

    3、Elasticsearch的内置分词器

    • Standard Analyzer - 默认分词器,按词切分,小写处理

    • Simple Analyzer - 按照非字母切分(符号被过滤), 小写处理

    • Stop Analyzer - 小写处理,停用词过滤(the,a,is)

    • Whitespace Analyzer - 按照空格切分,不转小写

    • Keyword Analyzer - 不分词,直接将输入当作输出

    • Patter Analyzer - 正则表达式,默认W+(非字符分割)

    • Language - 提供了30多种常见语言的分词器

    • Customer Analyzer 自定义分词器

    4、创建索引时设置分词器

    PUT new_index
    {
    	"settings": {
    		"analysis": {
    			"analyzer": {
    				"std_folded": {
    					"type": "custom",
    					"tokenizer": "standard",
    					"filter": [
    						"lowercase",
    						"asciifolding"
    					]
    				}
    			}
    		}
    	},
    	"mappings": {
    		"properties": {
    			"title": {
    				"type": "text",
    				"analyzer": "std_folded" #指定分词器
    			},
    			"content": {
    				"type": "text",
    				"analyzer": "whitespace" #指定分词器
    			}
    		}
    	}
    }
    

    二、ES内置分词器

    这里讲解下常见的几个分词器:Standard AnalyzerSimple Analyzerwhitespace Analyzer

    1、Standard Analyzer(默认)

    1)示例

    standard 是默认的分析器。它提供了基于语法的标记化(基于Unicode文本分割算法),适用于大多数语言

    POST _analyze
    {
      "analyzer": "standard",
      "text":     "Like X 国庆放假的"
    }
    

    运行结果

    2)配置

    标准分析器接受下列参数:

    • max_token_length : 最大token长度,默认255
    • stopwords : 预定义的停止词列表,如_english_ 或 包含停止词列表的数组,默认是 _none_
    • stopwords_path : 包含停止词的文件路径
    PUT new_index
    {
      "settings": {
        "analysis": {
          "analyzer": {
            "my_english_analyzer": {
              "type": "standard",       #设置分词器为standard
              "max_token_length": 5,    #设置分词最大为5
              "stopwords": "_english_"  #设置过滤词
            }
          }
        }
      }
    }
    

    2、Simple Analyzer

    simple 分析器当它遇到只要不是字母的字符,就将文本解析成term,而且所有的term都是小写的。

    POST _analyze
    {
      "analyzer": "simple",
      "text":     "Like X 国庆放假 的"
    }
    
    

    运行结果

    3、Whitespace Analyzer

    POST _analyze
    {
      "analyzer": "whitespace",
      "text":     "Like X 国庆放假 的"
    }
    

    返回


    三、中文分词

    中文的分词器现在大家比较推荐的就是 IK分词器,当然也有些其它的比如 smartCNHanLP

    这里只讲如何使用IK做为中文分词。

    1、IK分词器安装

    开源分词器 Ik 的github:https://github.com/medcl/elasticsearch-analysis-ik

    注意 IK分词器的版本要你安装ES的版本一致,我这边是7.1.0那么就在github找到对应版本,然后启动命令

    ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.1.0/elasticsearch-analysis-ik-7.1.0.zip
    

    运行结果

    注意 安装完插件后需重启Es,才能生效。

    2、IK使用

    IK有两种颗粒度的拆分:

    ik_smart: 会做最粗粒度的拆分

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

    1) ik_smart 拆分

    GET /_analyze
    {
      "text":"中华人民共和国国徽",
      "analyzer":"ik_smart"
    }
    

    运行结果

    2)ik_max_word 拆分

    GET /_analyze
    {
      "text":"中华人民共和国国徽",
      "analyzer":"ik_max_word"
    }
    

    运行结果


    参考

    1、Elasticsearch Analyzers

    2、Elasticsearch 分词器

    3、Elasticsearch拼音分词和IK分词的安装及使用



     我相信,无论今后的道路多么坎坷,只要抓住今天,迟早会在奋斗中尝到人生的甘甜。抓住人生中的一分一秒,胜过虚度中的一月一年!(15)
    

  • 相关阅读:
    python ddt数据驱动框架
    yarn的安装和使用【转】
    辅助色选取思路
    echarts y轴起始坐标值设置
    mapbox 图层视角设置
    vue-cli2使用store存储全局变量
    vue 数组不响应解决办法
    echarts之dataZoom配置项【转】
    Vue中使用地图平台MapboxGL【转载】
    快速入门MapboxGL【转载】
  • 原文地址:https://www.cnblogs.com/qdhxhz/p/11585639.html
Copyright © 2020-2023  润新知