首页 > 其他分享 >分布式搜索 - 什么是倒排索引

分布式搜索 - 什么是倒排索引

时间:2023-08-01 13:45:13浏览次数:37  
标签:倒排 数据库 索引 文档 搜索 id 分布式

这个问题是近段时间被问的最多的,理清思路就更好理解了,下面贴出来,也配合表格辅助理解。

其实很多搜索引擎都是基于倒排索引,比如luncene,solr以及elasticsearch

正排索引

 聊倒排搜索之前先来看看正排索引,正排其实就是数据库表,他通过id和数据进行关联,如下:

我们可以通过搜索id,来获得相应的数据,也能删除数据。你买了一本书,书的目录其实也是正排搜索。

假设现在我要搜苹果俩字,那么他会对这张表格中每一行的数据做匹配,去查找一下,是否包含苹果这两个字,从第一条匹配到最后一条,如果一张表中数据量不多,几万,十几万,那么问题不大,但是一旦数据量有上百万,上千万,那么全表扫描这种的搜索性能就会有影响。

其次,这个时候我想搜索苹果iPhone,那么我们无法把这词汇拆开再到数据库去搜索。

  • 优点:使用起来方便,原理也简单,比较入门,典型的数据库检索方式
  • 缺点:检索效率低下,适合简单场景使用,比如传统项目,数据量较小的项目。不支持分词搜索。

倒排索引

与正排相比是反着来的,他会把文档内容进行分词,比如“苹果公司发布iPhone”是一个文档数据,当我们把他存入到搜索引擎中去的时候,会有一个文档id,这个文档id就类似于数据库主键。但是这文档存储的时候和数据库不一样,他会进行一个分词,参照上面的表格,分词后的结果如下:

 

 每一个词汇都会和文档id关联起来,可以根据词汇来找到所有出现的id列表,如下:

假设现在我要搜索iPhone,如果是数据库搜索,假设有1亿条数据,那么会匹配1亿次,全表扫描。最后再把数据返回出来。

如果是搜索引擎,那么有可能第一次就把所有文档数据给查出来,当然也有可能是第N次,当然他肯定要比数据库的搜索效率更高。如图中位置,他会直接把1001,1003两个文档返回。

可能会有同学会问,数据库和搜索引擎都是1000万数据,搜索的词汇在搜索引擎中正好是第1000万条,那么会不会慢,其实这个肯定会比数据库更快,数据库要匹配是一个文本中的内容和关键词匹配,而搜索引擎是直接把关键字做匹配,效率肯定后者更快。

  • 优点:搜索更快,耗时短,用户体验高,精准度也高
  • 缺点:维护成本高,索引新建后要修改,必须先删除,前期需要很好地规划

 

目前博主已经开通知识星球,会提供更多的优质的视频与文章内容产出和服务,目前最低价,待试运营过后会有所上浮,如果有兴趣的话可以加入一下噢~

 

 

标签:倒排,数据库,索引,文档,搜索,id,分布式
From: https://www.cnblogs.com/leechenxiang/p/17596220.html

相关文章

  • 浅析互联网技术在分布式光伏发电运维平台的设计与实现
    摘要:随着光伏发电的不断发展,对于光伏发电监控系统的需求也日益迫切,“互联网+”时代,“互联网+”的理念已经转化为科技生产的动力,促进了产业的升级发展,本文结合“互联网+”技术提出了一种针对分散光伏发电站运行数据进行实时数据采集、分析、处理,查看实时运行情况,并通过移动APP对光伏......
  • 理解MySQL——索引与优化
    写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点。考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录。如果没有索引,查询将对整个表进行扫描,最坏的情况下,如果所有数据页都不在内存,需要读取10^4个页面,如果这10^4个页......
  • Java面试题 P28:数据库篇:MySql篇-MySql优化-索引-什么是索引?索引的底层数据结构是什么?
    什么是索引:索引(index)是帮助MySql高效获取数据的数据结构(有序)。在数据之外,数据库还维护着满足特定查找算法的数据结构(B+树),这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。 ......
  • SequoiaDB分布式数据库2023.7月刊
    本月看点速览再获肯定!巨杉数据库入选德勤粤港澳大湾区及广州高科技高成长两大榜单《数据库发展研究报告(2023年)》发布,巨杉数据库参编携手华南理工大学,“巨杉数据库管理与应用奖学金”成功颁发青杉计划2023已开启,一起攀登更高的“杉” 再获肯定!巨杉数据库入选德勤粤港澳大湾......
  • Java面试题 P23:Redis篇:redis分布式锁,是如何实现的?
       单台服务器:加synchronlzed解决方案。      (1)采用Watchdag给锁续期(2)抢不到锁的线程会尝试等待(3)所有的redis命令采用lua脚本,保证执行的原子性     ......
  • android 游戏开发 之索引贴
    1、Android游戏开发之旅(一)长按Button原理2、Android游戏开发之旅(二)View和SurfaceView3、Android游戏开发之旅(三)View类详解4、Android游戏开发之旅(四)Canvas和Paint实例5、Android游戏开发之旅(五)Path和Typeface6、Android游戏开发之旅(六)自定义View7、Android游戏开发之旅(七)......
  • mysql优化--索引
    mysql优化--索引Mysql索引大概有五种类型:普通索引(INDEX):最基本的索引,没有任何限制唯一索引(UNIQUE):与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。主键索引(PRIMARY):它是一种特殊的唯一索引,不允许有空值。全文索引(FULLTEXT):可用于MyISAM表,mysql5.6之后也可......
  • 数据库三大范式是什么、mysql有哪些索引类型,分别有什么作用、事务的特性和隔离级别
    目录1数据库三大范式是什么2mysql有哪些索引类型,分别有什么作用3事务的特性和隔离级别事务四大特性(ACID)隔离级别--->为了保证四个特性的隔离性而有的1数据库三大范式是什么-https://zhuanlan.zhihu.com/p/618012849-#第一范式:1NF是指数据库表的每一列都是不可分割 -每列......
  • 数据库三大范式&mysql的索引类型和作用&事务的特性和隔离级别
    数据库三大范式&mysql的索引类型和作用&事务的特性和隔离级别数据库三大范式第一范式#数据库表的每一列都是不可分割的基本数据-每列的值具有原子性,不可再分割-每个字段的值都只能是单一值举例:学籍信息不符合第一范式,可以继续分割第二范式#在第一范式的基础上-如果......
  • 数据库三大范式,mysql索引,事务的特性和隔离级别
    1数据库三大范式是什么数据库设计理论中的三大范式是指关系数据库中的规范化原则,目的是减少数据冗余和数据更新异常。第一范式(1NF):第一范式要求关系数据库表的每个属性都是原子性的,即每个属性不能再细分为更小的数据项。它要求将数据划分为最小的单元,避免重复或多值属性。这样......