索引风云

简介: 本文介绍了正排索引和倒排索引的概念及其区别。正排索引以文档ID为索引,文档内容为值;倒排索引则以单词或词组为索引,包含该单词或词组的文档ID列表为值。倒排索引在快速检索、高效存储和支持复杂查询方面具有显著优势,广泛应用于搜索引擎和全文检索系统中。

说到倒排索引就离不开它的对立面的正排索引,通常我们所了解到的索引正排索引会比较多。

正排索引如书本的目录、通讯录、音乐播放列表、数据库表的索引等。

倒排索引如图书馆的分类目录、超市物品分类、百度搜索引擎等。

那么它们本质上有什么区别呢?

  • 正排索引: 以文档ID为索引,文档内容为值。
  • 倒排索引: 以单词或词组为索引,包含该单词或词组的文档ID列表为值。

那么倒排索引有什么用呢?比如图书馆里有万千上万本书,需要快速找到所有包含“小黄鸭”的书。

要一本一本书,一页一页翻吗?

这时倒排索引就能排上用场了,下面详细介绍倒排索引。

一、正排 vs 倒排

1、正排索引


添加图片注释,不超过 140 字(可选)


正排索引:也称为前向索引,是将文档ID映射到文档内容的索引方式。

如书的目录:书的目录通常出现在前面部分,列出书中的章节和各部分的标题以及对应的页码,帮助读者快速找到特定内容。

示例: 假设我们有三个文档:

  • 文档1(ID: 1):"猫喜欢鱼"
  • 文档2(ID: 2):"狗喜欢骨头"
  • 文档3(ID: 3):"猫和狗都喜欢"

正排索引表示为:

1 -> "猫喜欢鱼" 2 -> "狗喜欢骨头" 3 -> "猫和狗都喜欢"

2、倒排索引


添加图片注释,不超过 140 字(可选)


倒排索引:是将词项映射到包含该词项的文档ID列表的索引方式。

如图书馆的分类目录:图书馆会按照图书的主题对其进行分类,比如历史类、科学类、文学类等。当你想找关于某个特定主题的书籍时,通过相应的分类目录,就能快速找到该主题下的书籍编号或位置。这类似于通过关键词在倒排索引中找到相关文档的编号。

示例: 基于上面的文档,倒排索引表示为:

"猫" -> [1, 3] "喜欢" -> [1, 2, 3] "鱼" -> [1] "狗" -> [2, 3] "骨头" -> [2] "和" -> [3] "都" -> [3]


二、倒排索引详解

探索倒排索引:让搜索变得更高效

在信息爆炸的时代,我们每天都在与海量的文本数据打交道。无论是通过搜索引擎查找信息,还是在电子邮件中搜索特定的内容,我们都希望能快速找到所需的信息。这种高效搜索的背后,倒排索引(Inverted Index)扮演了一个重要的角色。我们就来了解一下倒排索引是什么,以及它如何让我们的搜索变得更高效。

什么是倒排索引?

要理解倒排索引,我们可以先来看一个简单的例子。想象一下,你是一位图书馆管理员,你需要管理数以千计的书籍,并且读者时不时会来问你,哪些书里提到了某个特定的话题,比如“猫”。

如果没有索引,你可能需要一页一页地翻阅所有书籍,寻找“猫”这个词,这显然是一个非常耗时的过程。于是,你决定建立一个索引。最简单的索引方法是记录每本书里出现了哪些关键词以及它们的位置。这就是倒排索引的基本思想。

倒排索引是如何工作的?

倒排索引的核心思想是将每个关键词映射到包含这个关键词的所有文档ID上。让我们通过一个具体的例子来说明。

假设我们有以下三个文档:

  1. 文档1:"猫喜欢鱼"
  2. 文档2:"狗喜欢骨头"
  3. 文档3:"猫和狗都喜欢"

为了建立倒排索引,我们需要以下几个步骤:

  1. 提取词项:从每个文档中提取所有词项并进行分词。
  2. 创建词典:建立一个词典,记录每个词项。
  3. 建立倒排列表:对于每个词项,记录包含该词项的文档ID列表。

基于上述文档,我们的倒排索引如下:

"猫" -> [1, 3] "喜欢" -> [1, 2, 3] "鱼" -> [1] "狗" -> [2, 3] "骨头" -> [2] "和" -> [3] "都" -> [3]

这意味着,如果你想找包含“猫”的文档,只需查找倒排索引,就可以知道文档1和文档3包含“猫”。

为什么倒排索引很重要?

倒排索引在实际应用中有许多优点,使其成为全文检索系统中的重要工具:

  1. 快速检索:倒排索引允许我们在大量文档中快速找到包含某个特定词项的所有文档,极大地提高了搜索速度。
  2. 高效存储:虽然建立倒排索引需要额外的存储空间,但这种结构使得检索过程非常高效,从整体上节省了时间成本。
  3. 支持复杂查询:倒排索引不仅支持单词搜索,还能处理布尔查询、短语搜索等复杂的查询类型。



我是栈江湖,如果你喜欢此文章,不要忘记关注+点赞哦!你的支持是我创作的动力。如果你有任何意见或建议,欢迎在下方留言。若转载,请注明文章来源。

目录
相关文章
|
7月前
|
存储 关系型数据库 MySQL
索引大战:探秘InnoDB数据库中B树和Hash索引的优劣
索引大战:探秘InnoDB数据库中B树和Hash索引的优劣
71 0
|
算法 索引
|
18小时前
|
存储 Oracle 关系型数据库
索引在手,查询无忧:MySQL索引简介
MySQL 是一款广泛使用的关系型数据库管理系统,在2024年5月的DB-Engines排名中得分1084,仅次于Oracle。本文介绍MySQL索引的工作原理和类型,包括B+Tree、Hash、Full-text索引,以及主键、唯一、普通索引等,帮助开发者优化查询性能。索引类似于图书馆的分类系统,能快速定位数据行,极大提高检索效率。
22 8
|
18小时前
|
存储 关系型数据库 MySQL
索引与书架、新华字典的爱恨情仇
在MySQL中,索引是提升查询速度的关键技术。根据存储类型,索引分为聚簇索引和非聚簇索引。聚簇索引将数据按索引顺序存储在磁盘上,查询主键时效率极高;非聚簇索引则通过索引项指向实际数据位置,适用于多条件查询。本文详细解释这两种索引的工作原理及应用场景,并介绍InnoDB和MyISAM存储引擎的实现方式。
16 4
|
4月前
|
存储 关系型数据库 MySQL
(十九)MySQL之表分区篇:涨知识了!携手共探鲜为人知的表分区!
分库分表相信大家都听说过,但(partitioning)表分区这个概念却鲜为人知,MySQL在5.1版本中开始支持了表分区技术,同时在MySQL5.5中进行了优化,自从MySQL支持的绝大部分引擎都开启了表分区功能。
512 2
|
7月前
|
算法 前端开发 索引
2624. 蜗牛排序
2624. 蜗牛排序
43 0
|
SQL Oracle 关系型数据库
物化视图占存储空间吗? by彭文华
物化视图占存储空间吗? by彭文华
|
数据采集 数据可视化 数据挖掘
NBA官方球衣销量榜“詹皇”居首,快看看你的偶像排第几
NBA官方球衣销量榜“詹皇”居首,快看看你的偶像排第几
|
存储 SQL 算法
别再一知半解啦!索引其实就这么回事!
别再一知半解啦!索引其实就这么回事!
别再一知半解啦!索引其实就这么回事!