搜索引擎-倒排索引 | 青训营笔记

231 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第五篇笔记

搜索引擎一般由以下 4 个组件构成。

● 索引管理器(Index Manager) 管理带有索引结构的数据,索引结构是一 种用于进行高速检索的数据结构。对索引的访问也是通过索引管理器进 行的。

● 索引检索器(Index Searcher) 利用索引进行全文搜索处理的组件。索引检索器根据 来自检索应用程序用户的查询,协同索引管理器进行检索处理。在大多 数情况下,索引检索器都会根据某种标准对与查询相匹配的检索结果排 序,并将排在前面的结果返回给应用程序。

● 索引构建器(Indexer) 从作为检索对象的文本文档中生成索引的组件。索引 构建器会先通过解析将文本文档分解为单词序列,然后再将该单词序列 转换为索引结构。在搜索引擎中,将生成索引的环节称为索引构建 (Index Construction)。

● 文档管理器(Document Manager) 管理文档数据库的组件,文档数据库中储存着作为检 索对象的文档。文档管理器会先从文档数据库中取出与查询相匹配的文 档,然后再根据需要从该文档中提取出一部分内容作为摘要。

image.png

倒排索引结构

排索引具有与图书索引完全相同的逻辑结构。以一本书中的文档为例来具体看看倒排索引。这本书由以下两页组成,内容分别如下所示。

● 第 1 页(P1):I like search engines.
● 第 2 页(P2):I search keywords in Google. image.png

哪个单词出现在了哪一页,就是倒排索引

image.png

结构 倒排索引=辞典+倒排文件 image.png

中文倒排索引需要分词

实现倒排索引

实现字典

常用的树形数据结构有保存着各 个单词顺序关系的二叉查找树(Binary Search Tree)和字典树(Trie)等。 用二叉查找树实现词典

  • 用二叉查找树实现词典 要先将数据对(的列表)按照单词的 词典顺序排列,然后存储到存储器中。数据对是由单词和对应着该单词的倒排列表的引用信息构成的。

  • 用 B+ 树实现词典 B+ 树是一种平衡的多叉树,属于从 B 树派生出来的树形结构。在B+树中,所有的记录都存储在树中的叶结点(Leaf Node)上,内部结点(Internal Node)上只以关键字的顺序存储关键字。

实现倒排文件

在实现倒排文件时,往往会假设所有倒排列表都会变得很长,因此 一般都会将倒排列表存储到二级存储的连续区域中 。由此就可以通过二 级存储的顺序存取来加载倒排列表了,特别是在使用磁盘驱动器时,这 种做法往往能够在数据加载方面增大吞吐量。