3.4.2.17.4.Analyzers / Custom analyzers
创作人:孙宁宇
审稿人:欧阳楚才
Elasticsearch 通过倒排索引实现全文检索,倒排索引中最核心的部分就是分词。为了构建这个倒排索引就需要我们把一个完整的句子通过某一种方式进行切割得到单词集合,而这个方式就是本节要介绍的分词器 Analyzer。例如 Avengers: Infinity War 通过分词后,我们就把拆解的3个单词 avengers,infinity 及 war 添加到倒排索引中。在后面的搜索阶段你就可以使用这3个单词来对文档进行匹配。
分词器在写入阶段
一个文本字段在写入 Elasticsearch 之前,分词器首先会对文本进行一系列的处理把文本进行分解。分词器就像管道一样,按照执行顺序依次把文本进行流转,处理完成后的文本将会被分解为一个一个的 token,而这些 token 就是组成倒排索引的基础。通过下图可以看出我们输入的字符串分别经历了 Character filters,Tokenizer,Token filters 三个阶段的操作,最后将分词结果 [ "heya", "we're", "elastic" ] 写入倒排索引中。
分词器在搜索阶段
默认情况下,在对 text 字段查询时使用的分词器就是字段写入时设置的分词器,这样做的目的就是能尽可能的让分词可以正确匹配。当然我们也可以指定和写入不一样的分词器作为搜索分词器。查询的字段内容首先按照设置的分词器进行分词操作,根据分词的结果在倒排索引中进行匹配。
图中的例子我们是想查询电影名称和 X-Man 相关的文档,首先要做的是对 X-Man 进行分词,由于我们在没有指定分词器,Elasticsearch 默认会使用 standard 类型的分词器进行解析,这个分词器的细节内容稍后的内容会进行介绍,这里你可以看到通过 standard 分词器的处理后,我们要搜索的内容 X-Man 会被分解成 X 和 Man 两个词,两个词分别在倒排索引中匹配,任何一个匹配上的文档都将会返回。
《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.4.Analyzers / Custom analyzers(2) https://developer.aliyun.com/article/1229775