type
status
date
slug
summary
tags
category
icon
password
Property
倒排索引常使用在搜索引擎当中,是搜索引擎为文档内容建立索引,实现内容快速检索必不可少的数据结构。。
倒排索引的存储:内存索引和B+树索引。
正排索引
假设目前有两个 HTML 页面,一个页面内容是 "I like search engines.",而另一个页面内容是 "I search keywords in google.",现在将其按照单词进行划分,形成下表所示的结构:
ㅤ | I | like | search | engine | keywords | in | google |
P1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |
P2 | 1 | 0 | 1 | 0 | 1 | 1 | 1 |
其中,每一行表示一个页面,每一列表示一个单词,0 表示该单词未出现在该页面中,而 1 则表示该单词出现在该页面中。那么当我们搜索含有关键词 "engine" 的页面时,我们需要遍历上表的每一行,这就是正排索引。
其定义如下:当用户发起查询时(假设查询为一个关键词),搜索引擎会扫描索引库中的所有文档,找出所有包含关键词的文档,这样依次从文档中去查找是否含有关键词的方法叫做正排索引。
倒排索引
现在我们交换上表中的行和列,就会形成如下所示的表格结构:
ㅤ | P1 | P2 |
engine | 1 | 0 |
google | 0 | 1 |
I | 1 | 1 |
in | 0 | 1 |
keywords | 0 | 1 |
in | 1 | 0 |
search | 1 | 1 |
更进一步的,我们将其转化为如下形式:
关键词 | 页面 |
engine | P1 |
google | P2 |
I | P1、P2 |
in | P2 |
keywords | P2 |
in | P1 |
search | P1、P2 |
那么此时我们搜索含有关键词 "engine" 的页面,可以直接在常数时间复杂度内找到其结果为 P1,这就是倒排索引。并且,我们还可以在建立索引的时候为每个页面加上其他的衡量参数,在建立索引时就可以根据这些参数完成页面排序。
其定义如下:搜索引擎会把正排索引变为倒排索引,即把“文档→单词”的形式变为“单词→文档”的形式。
倒排索引的结构如下图所示:
代码实现
倒排项的定义如下:
倒排列表的定义如下:
倒排索引的定义如下:
创建倒排索引的相关代码如下:
关键词搜索相关的代码如下: