首页 > 其他分享 >简述倒排索引

简述倒排索引

时间:2023-07-23 16:45:53浏览次数:33  
标签:词条 倒排 索引 简述 文档 搜索 id

倒排索引是什么?

1.2 倒排索引

倒排索引的概念是基于MySQL这样的正向索引而言的。

1.2.1 正向索引

那么什么是正向索引呢?例如给下表(tb_goods)中的id创建索引:
image

如果是根据id查询,那么直接走索引,查询速度非常快。

但如果是基于title做模糊查询,只能是逐行扫描数据,流程如下:

1)用户搜索数据,条件是title符合"%手机%"

2)逐行获取数据,比如id为1的数据

3)判断数据中的title是否符合用户搜索条件

4)如果符合则放入结果集,不符合则丢弃。回到步骤1

逐行扫描,也就是全表扫描,随着数据量增加,其查询效率也会越来越低。当数据量达到数百万时,就是一场灾难。

1.2.2 倒排索引

倒排索引中有两个非常重要的概念:

  • 文档(Document):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息
  • 词条(Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。例如:我是中国人,就可以分为:我、是、中国人、中国、国人这样的几个词条

创建倒排索引是对正向索引的一种特殊处理,流程如下:

  • 将每一个文档的数据利用算法分词,得到一个个词条
  • 创建表,每行数据包括词条、词条所在文档id、位置等信息
  • 因为词条唯一性,可以给词条创建索引,例如hash表结构索引

如图:
image

倒排索引的搜索流程如下(以搜索"华为手机"为例):

1)用户输入条件"华为手机"进行搜索。

2)对用户输入内容分词,得到词条:华为手机

3)拿着词条在倒排索引中查找,可以得到包含词条的文档id:1、2、3。

4)拿着文档id到正向索引中查找具体文档。

如图:
image

虽然要先查询倒排索引,再查询倒排索引,但是无论是词条、还是文档id都建立了索引,查询速度非常快!无需全表扫描。

1.2.3.正向和倒排

那么为什么一个叫做正向索引,一个叫做倒排索引呢?

  • 正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程

  • 倒排索引则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程

是不是恰好反过来了?

那么两者方式的优缺点是什么呢?

正向索引

  • 优点:
    • 可以给多个字段创建索引
    • 根据索引字段搜索、排序速度非常快
  • 缺点:
    • 根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。

倒排索引

  • 优点:
    • 根据词条搜索、模糊搜索时,速度非常快
  • 缺点:
    • 只能给词条创建索引,而不是字段
    • 无法根据字段做排序

标签:词条,倒排,索引,简述,文档,搜索,id
From: https://www.cnblogs.com/yangyezhuang/p/17575189.html

相关文章

  • mongodb的索引是B还是B+
    MongoDB索引的选择:B树还是B+树简介在MongoDB中,索引是用来提高查询性能的重要工具。MongoDB支持多种类型的索引,其中最常用的是B树索引和B+树索引。在选择使用哪种索引类型时,需要考虑数据的特点和查询需求。本文将介绍如何在MongoDB中选择使用B树还是B+树索引,并提供相应的代码示例......
  • mysql删除索引的sql语句
    如何实现“mysql删除索引的sql语句”作为一名经验丰富的开发者,我很乐意教给你如何在MySQL中删除索引的SQL语句。下面,我将为你提供一个详细的步骤指南,以帮助你完成这个任务。删除索引的步骤首先,让我们来整理一下删除索引的步骤。可以用下表展示:步骤操作步骤1连接到MyS......
  • MySQL(视图、事务、存储过程、函数、流程控制、索引)
    一视图(了解)什么是视图视图就是通过查询得到一张虚拟表,然后保存下来,下次可以直接使用为什么要用视图如果要频繁的操作一张虚拟表(拼表组成的),你就可以制作成视图,后续直接操作视图其实也是一张表如何操作#固定语法createview#具体操作createviewteacher2......
  • 索引的优化
    如下一.索引的优化1.在经常查询而不经常增删改的操作的字段加索引。2.Orderby和groupby后面的字段应该是索引字段。3.索引字段长度不应该很长。二.会导致索引丢失,在开发中尽量避免出现1.where子句中使用like关键字时,前置百分号会导致索引失效。2.where子句中使用is......
  • mysql 索引字段过大不走该索引
    如何处理“mysql索引字段过大不走该索引”概述在使用MySQL数据库时,索引是提高查询性能的重要工具之一。然而,当索引字段的大小超过MySQL的限制时,MySQL可能会选择不使用该索引,导致查询性能下降。本文将介绍如何处理这种情况。处理步骤步骤描述步骤一确认数据库中的表......
  • mysql 索引重建
    MySQL索引重建的流程在MySQL数据库中,索引是提高查询效率的重要手段。当数据库中的数据发生变动,如新增、修改、删除等操作时,索引可能会不再有效,此时需要对索引进行重建,以保证查询的高效性。下面是MySQL索引重建的流程:步骤描述1确定需要重建索引的表2判断表是否需要......
  • mysql 索引类型 fulltext
    如何实现MySQL索引类型fulltext简介在MySQL中,fulltext是一种特殊的索引类型,它可以提供更高效的全文搜索功能。本文将向你介绍如何使用fulltext索引类型来优化全文搜索的性能。流程图以下是使用fulltext索引类型实现全文搜索的流程图:步骤操作1创建包含ful......
  • mysql 存储过程索引
    MySQL存储过程索引在MySQL数据库中,存储过程是一组预编译的SQL语句,这些语句通过一个名称被存储在数据库中,可以被多次调用。索引则是一种数据结构,用于加快数据库查询的速度。在本文中,我们将讨论如何在MySQL存储过程中使用索引,以提高查询性能。索引的作用索引可以显著提高查询的速......
  • MySQL之索引使用与失效情况
    MySQL之索引使用与失效情况索引使用验证索引效率在未建立索引之前,执行如下SQL语句,查看SQL的耗时。SELECT*FROMtb_skuWHEREsn="100000003145001';针对字段创建索引createindexidx_sku_snontbsku(sn);然后再次执行相同的SQL语句,再次查看SQL的耗时SELECTFROMtb_......
  • 使用 Python 对相似索引元素上的记录进行分组
    源码下载在Python中,可以使用pandas和numpy等库对类似索引元素上的记录进行分组,这些库提供了多个函数来执行分组。基于相似索引元素的记录分组用于数据分析和操作。在本文中,我们将了解并实现各种方法对相似索引元素上的记录进行分组。方法一:使用熊猫分组()Pandas是一个强......