篇博客主要讲:分词器概念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 filters , tokenizers , token 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_fold