一架梯子,一头程序猿,仰望星空!
Elasticsearch面试题 > 内容正文

Elasticsearch 的倒排索引是什么?它为什么能提高搜索性能?


问题简答

倒排索引是一种基于单词的索引方式,它可以将每个单词都看作是一个关键词,然后记录下该单词在哪些文档中出现过。倒排索引的核心是倒排列表,它记录了每个单词在哪些文档中出现以及在文档中出现的位置。

具体来说,当用户输入一个查询词时,Elasticsearch 会首先检查倒排索引,找到所有包含该词的文档,然后再对这些文档进行评分和排序,最后返回与查询最相关的文档。

问题详解:

倒排索引优点

相比传统的索引方式,倒排索引的搜索效率更高的原因有以下几点:

1、减少搜索的文档数量: 倒排索引记录了每个单词在哪些文档中出现,因此可以快速地找到包含查询词的文档,从而减少了需要搜索的文档数量。这对于大规模数据的搜索非常有用。

2、提高搜索的精度: 倒排索引还可以记录查询词在文档中出现的位置和频率等信息,从而可以对搜索结果进行更精细的排名和排序。这可以提高搜索的准确性和相关性。

3、支持复杂的查询操作: 倒排索引支持各种复杂的查询操作,如布尔运算、通配符、模糊查询、范围查询、地理位置查询等。这可以帮助用户更精细地控制搜索结果,提高搜索的效率和准确性。

例子

假设有以下 3 个文档:

文档1: "Elasticsearch is a search engine based on Lucene"
文档2: "Elasticsearch provides a distributed search engine"
文档3: "Lucene is a search engine library"

使用倒排索引来索引这些文档,可以得到以下倒排列表:

关键词 文档编号 出现位置
Elasticsearch 1,2 0,3
is 1,2,3 1,4,2
a 1,3 2,1
search 1,2,3 2,1,2
engine 1,2,3 2,4,3
based 1 4
on 1 5
Lucene 1,3 6,2
provides 2 1
distributed 2 2
library 3 4

可以看到,每个关键词都对应着一个文档列表,记录了该关键词出现在哪些文档中以及在文档中出现的位置。

例如,当用户搜索关键词 “Elasticsearch search” 时,Elasticsearch 会先找到包含这两个关键词的文档,即文档 1 和文档 2。然后再对这两个文档进行评分和排序,最后返回与查询最相关的文档。