500字领略ElasticSearch等搜索引擎的倒排索引原理

首先我们来看下,我们平时在搜索框输入关键词,下面展示出来的搜索结果页是怎么来的。

废话不多说,我们先来看一个例子:(在百度搜索框中输入“精美散文”)

嗯,很好。没有出现百度的广告。平心而论,看到这个搜索结果列表页相信搜索这个关键词的用户还是应该会比较满意的。

我们再进一步查看一下这张图的信息:

  1. 百度为您找到相关结果约14200000个;

  2. 列表页飘红的词均出现在搜索框中,唯一让人意外的是百度搜索后台对“文章”一词也做了飘红处理;

  3. 排在首位的搜索结果,飘红词跟搜索框中的词完全匹配;

  4. 匹配到包含搜索词的搜索结果似乎排名也更靠前。

为什么会出现这样的结果呢?这里就要引出我们今天的主角【倒排索引】了。

先看一下维基百科是怎么定义倒排索引:

倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成:“单词词典”和“倒排文件”。

倒排索引有两种不同的反向索引形式:

一条记录的水平反向索引(或者反向档案索引)包含每个引用单词的文档的列表。

一个单词的水平反向索引(或者完全反向索引)又包含每个单词在一个文档中的位置。

后者的形式提供了更多的兼容性(比如短语搜索),但是需要更多的时间和空间来创建。

通过上面的定义可以知道,一个倒排索引包含一个单词词典和一个倒排文件。其中单词词典包含了所有粒度的拆分词;倒排文件则保存了该词对应的所有相关信息。

这里举个例子来解释一下,假如我们要对3篇文档(网页)建立索引:

文档1:中国古代的精美散文

文档2:古代精美散文作者

文档3:如何写出精美散文

那么文档中的词典集合为{中国,古代,精美,散文,作者,如何,写出,的},倒排索引见下图:

百度后台建立了索引之后,我们就可以开始查询了。如第一图所示,输入“精美散文”,分词得到{精美,散文},查倒排索引,就出现了第一图的展示结果。

到这里,大家可能对倒排索引以及我们平时搜索展现结果的根本原因有了一个基本的了解。至此,倒排索引完工

猜你喜欢

转载自blog.csdn.net/forward__/article/details/80067345