信息检索——简单易懂的倒排索引(原理+例子) | 青训营笔记

307 阅读3分钟

引言

    今天介绍一下倒排索引,倒排索引又叫反向索引(inverted index),既然有反向索引那就有正向索引(forward index)了。一些相关概念可以看前文信息检索(Information Retrieval)相关概念。


正向索引和反向索引

先介绍一下正向索引: 当用户发起查询时(假设查询为一个关键词),搜索引擎会扫描索引库中的所有文档,找出所有包含关键词的文档,这样依次从文档中去查找是否含有关键词的方法叫做正向索引。互联网上存在的网页(或称文档)不计其数,这样遍历的索引结构效率低下,无法满足用户需求。 正向索引结构如下:

文档1的ID→单词1的信息;单词2的信息;单词3的信息…

文档2的ID→单词3的信息;单词2的信息;单词4的信息…

image.png

为了增加效率,搜索引擎会把正向索引变为反向索引(倒排索引)即把“文档→单词”的形式变为“单词→文档”的形式。倒排索引具体机构如下:

单词1→文档1的ID;文档2的ID;文档3的ID…

单词2→文档1的ID;文档4的ID;文档7的ID…

image.png

单词-文档矩阵

单词-文档矩阵是表达两者之间所具有的一种包含关系的概念模型。 现有以下几个文档:

D1:乔布斯去了中国。

D2:苹果今年仍能占据大多数触摸屏产能。

D3:苹果公司首席执行官史蒂夫·乔布斯宣布,iPad2将于3月11日在美国上市。

D4:乔布斯推动了世界,iPhone、iPad、iPad2,一款一款接连不断。

D5:乔布斯吃了一个苹果。

此时用户查询为“苹果 And (乔布斯 Or iPad2)”,表示包含单词“苹果”,同时还包含“乔布斯”或“iPad2”的其中一个。

此时用户查询为“苹果 And (乔布斯 Or iPad2)”,表示包含单词“苹果”,同时还包含“乔布斯”或“iPad2”的其中一个。

倒排索引

倒排索引(Inverted Index):倒排索引是实现“单词-文档矩阵”的一种具体存储形式,通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成:“单词词典”和“倒排文件”。

单词词典(Lexicon):搜索引擎的通常索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向“倒排列表”的指针。

倒排列表(PostingList):倒排列表记载了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,每条记录称为一个倒排项(Posting)。根据倒排列表,即可获知哪些文档包含某个单词。

倒排文件(Inverted File):所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件即被称之为倒排文件,倒排文件是存储倒排索引的物理文件。

总结

本文介绍了正排&倒排索引,由于在项目中需要用到es/gofound,因此特地写了这篇文章来帮助我理解相关的概念。具体的可以参考es/gofound的官网有详细的介绍;

参考

blog.51cto.com/u_15352924/…