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

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

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

1、分词器概念

一、Analysis 和 Analyzer

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

当一个文档被索引时,每一个Field均可能会建立一个倒排索引(Mapping能够设置不索引该Field)。github

倒排索引的过程就是将文档经过Analyzer分红一个一个的Term,每个Term都指向包含这个Term的文档集合。正则表达式

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

2 、Analyzer组成

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

1) character filter 字符过滤器app

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

2) tokenizers 分词器机器学习

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

3) Token filters Token过滤器ide

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

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

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

三、Elasticsearch的内置分词器

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

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

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

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

  • Keyword Analyzer - 不分词,直接将输入看成输出

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

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

  • Customer Analyzer 自定义分词器

四、建立索引时设置分词器

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" #指定分词器
            }
        }
    }
}


2、ES内置分词器

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

一、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_"  #设置过滤词
        }
      }
    }
  }
}

二、Simple Analyzer

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

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

运行结果

三、Whitespace Analyzer

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

返回


3、中文分词

中文的分词器如今你们比较推荐的就是 IK分词器,固然也有些其它的好比 smartCNHanLP

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

一、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,才能生效。

二、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"
}

运行结果


参考

一、Elasticsearch Analyzers

二、Elasticsearch 分词器

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




我相信,不管从此的道路多么坎坷,只要抓住今天,早晚会在奋斗中尝到人生的甘甜。抓住人生中的一分一秒,赛过虚度中的一月一年!(15)
相关文章
相关标签/搜索