全文搜索的工作原理
下图展示了全文搜索的组件。
从宏观层面来看,全文搜索涉及以下内容:
- 文本分析:分析由一系列按顺序进行的转换管道组成。文本会使用词干提取、转为小写以及停用词消除等技术,转换为针对搜索进行过优化的格式。Elasticsearch 包含许多内置的分析器和分词器,其中包括用于分析特定语言文本的选项。你还可以创建自定义分析器。
提示
请参阅测试分析器以了解如何测试分析器并检查它生成的词条和元数据。
倒排索引创建:分析完成后,Elasticsearch 会从生成的词条中构建倒排索引。倒排索引是一种数据结构,它将每个词条映射到包含该词条的文档。它由两个关键组件组成
- 字典:索引中文档集合中所有唯一词条的排序列表。
- 倒排列表(Posting list):对于每个词条,列出该词条出现的文档 ID 列表,以及诸如词频和位置等可选元数据。
相关性评分:结果会根据其与给定查询的相关性进行排序。每个文档的相关性评分由一个称为
_score的正浮点数表示。_score越高,文档相关性越高。Elasticsearch 用于计算相关性评分的默认相似度算法是 Okapi BM25,它是 TF-IDF 算法的一个变体。BM25 根据词频、文档频率和文档长度来计算相关性评分。有关 BM25 的深入探讨,请参阅这篇技术博客文章。
全文搜索查询:查询文本的分析方式与索引文本相同,并使用生成的词条来搜索倒排索引。
Query DSL 支持多种全文查询。
从 8.17 版本开始,ES|QL 还支持全文搜索函数。