Elasticsearch 分析器介绍
在 Elasticsearch 的世界里,构建高效搜索引擎的关键一环,便是透彻理解分析器(Analyzer)的工作机制。一个优秀的搜索引擎,能够精准地返回与用户查询紧密相关的文档,而这背后,正是分析器在默默发挥着核心作用。它不仅负责处理待索引的文档,还在用户发起查询时,智能评估哪些文档与查询关键词的匹配度更高。
一、倒排索引:分析器的基石
在深入探讨分析器之前,有必要先了解与之紧密关联的倒排索引。倒排索引是一种极为重要的数据结构,它建立起了分词与包含该分词的文档编号之间的映射关系。此外,倒排索引还记录了分词在文档中的具体位置信息。正是得益于这种映射机制,Elasticsearch 在处理关键词查询时
,能够迅定位并返回匹配文档的编号。
1.1、文档构建倒排索引实例
假设有以下两条文档:
- 文档 1:Elasticsearch is fast速文档 2:I want to learn Elasticsearch
经过处理后,倒排索引构建结果如下(第一列为分词内容,第二列为分词出现的次数,第三列为分词所在的文档编号以及在文档中的位置)。通过倒排索引,分词被统计后映射到文档编号,并保存了其在文档中的位置。这里之所以看不到完整文档,正是因为文档已经过分析器的分析处理,这也正是本文要深入探讨的重点。
1.2、在倒排索引中查询的奥秘
在倒排索引中执行查询时,有一个关键要点需要注意:Elasticsearch 只会获取与查询关键词具有相同分词的文档。这一特性可以通过 match query 和 term query 两类查询进行验证。其中,match query 会借助分析器对查询内容进行分析,而 term query 则不会。在另一篇相关文档中,对这两类查询的区别有着详细的阐述。
以 “Elasticsearch” 为关键词进行查询为例,如果使用 term query,将不会得到任何结果,原因在于倒排索引中存储的分词是 “elasticsearch”,其开头字母为小写的 “e”。而使用 match query 进行相同关键字的查询时,Elasticsearch 会先利用分析器对查询关键字进行分析,得到 “elasticsearch”,然后再到倒排索引中检索,从而能够返回相应结果。
二、Elasticsearch 中的分析器:文档处理的核心
当向 Elasticsearch 插入一篇文档时,系统并不会直接原样保存文档内容,而是会先交由分析器进行分析。在分析过程中,分析器首先会对文本进行转换,并将其拆分为一个个分词,随后再将这些分词保存到倒排索引中。例如,将 “Let’s build an Autocomplete!” 插入 Elasticsearch 时,文本转换后会被划分为 “let’s”、“build”、“an” 和 “autocomplete” 这 4 个分词。
值得注意的是,分析器影响的是搜索文本的方式,并不会改变文本本身的内容。比如在上述例子中,即使搜索 “let”,Elasticsearch 返回的依然是全文 “Let's build a