热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

算法高级(34)搜索引擎速度快的秘诀倒排索引介绍

对于数据库查询来说,大家都知道,模糊查询比较耗时,即使建立索引,查起来也不快,而像百度、谷歌这样的搜索引擎&#

对于数据库查询来说,大家都知道,模糊查询比较耗时,即使建立索引,查起来也不快,而像百度、谷歌这样的搜索引擎,基本上也是模糊查询,而且响应速度特别快,这是为什么呢?其实里面有个很重要的因素,就是使用了倒排索引,这极大地提高了查询效率。而一切的设计都是为了提高搜索的速度。


一、倒排索引和正排索引

倒排索引(Inverted Index)也叫反向索引,有反向索引必有正向索引。通俗地来讲,正向索引是通过key找value,反向索引则是通过value找key。

【百度百科】倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。

很典型的,数据库的查询是根据key查询value的过程,索引可以把数据库索引理解为正排索引。


二、数据库索引和倒排索引的区别联系

数据库中的MyISAM存储引擎就是一颗多路树,也是一颗B+树,结构如下:

这种结构我们前面讲过,根节点存储了我们需要查询的数据,可以根据查询条件遍历这颗树,找到我们要的内容,但从查询效率上来说,即使建立索引,我们也需要从上往下依次遍历。最好的就是二分查找。

那么有没有可能我们通过输入的关键字直接找到我们要的结果呢?这就需要倒排索引了,我们给上图中所有的P节点再建立索引,查询的时候,我们根据索引能快速找到P节点对应的具体内容直接返回,这其实就是倒排索引。

一句话概括,对数据库的索引再次建立索引就是倒排索引。而倒排索引因此会占用比较多的磁盘空间,典型的以空间换时间的范例。为了更进一步理解,下面从网上摘了两张图来具现化这一过程:


三、Lucene中的倒排索引

而像Lucene这样的搜索API实现,底层的数据结构使用的就是倒排索引,接下来我们具体研究一下。

Lucene中没有使用B树这种数据结构,而是将关键字按字符顺序排列、顺序存储在磁盘上,因此lucene可以使用二分查找来快速定位记录。

Lucene中使用字典文件记录所有的关键字,所以一开始需要一个字典文件,对于英文,可以使用词典中的单词,而对于汉字,因为单个的汉字通常不能表达太多意义,所以中文我们一般会提供中文词典。

接下来要对我们的数据集进行分析处理,分析的过程,就是把记录的内容按照字典中的词汇进行分解,分解成一个个的短语,并且记录这些短语给这些短语建立索引,记录下每个短语对应的记录的位置。

第三步,要对用户输入的关键字进行拆分,拆分为一个个的词条,拆分完去跟第二步建立的索引进行比对,找到我们要的结果。

可以发现,在整个过程中,比较耗时的操作是数据的预处理阶段,我们需要对原始数据进行分解并建立索引。而索引建立完毕的查询操作,就是二分查找,那是非常的快速了。


四、Lucene对倒排索引的优化之压缩算法

为了减小索引文件的大小,Lucene对索引还使用了压缩技术。


1.首先&#xff0c;对词典文件中的关键词进行了压缩&#xff0c;关键词压缩为<前缀长度&#xff0c;后缀>。

例如&#xff1a;当前词为“阿拉伯语”&#xff0c;上一个词为“阿拉伯”&#xff0c;那么“阿拉伯语”压缩为<3&#xff0c;语>。


2.其次大量用到的是对数字的压缩&#xff0c;数字只保存与上一个值的差值

&#xff08;这样可以减小数字的长度&#xff0c;进而减少保存该数字需要的字节数&#xff09;。
例如当前文章号是16389&#xff08;不压缩要用3个字节保存&#xff09;&#xff0c;上一文章号是16382&#xff0c;压缩后保存7&#xff08;只用一个字节&#xff09;。


五、总结

关于倒排索引就介绍到这里&#xff0c;最后给大家举一个非常形象的例子&#xff0c;我相信大家瞬间就可以明白倒排索引这种结构了。

各位同学作为九年义务教育的好学生&#xff0c;相信大家一定都学过英语&#xff0c;也用过英语字典&#xff0c;在使用英语字典的时候&#xff0c;同学们肯定深有体会&#xff0c;查个单词怎么那么慢呢&#xff1f;要一页一页地翻。这种查询跟数据库的查询类似&#xff0c;就是遍历结果集&#xff0c;所以效率不高。

而作为都读过小学的各位读者老爷们&#xff0c;也一定使用过新华字典&#xff0c;你是不是发现查新华字典是一种享受啊&#xff0c;为啥呢&#xff0c;因为新华字典有拼音检字法和部首检字法&#xff0c;通过检字法我们能速度定位我们要查的汉字在字典中的位置&#xff0c;到了这里&#xff0c;你应该就明白了&#xff0c;原来新华字典中的检字法用的就是倒排索引的原理呀。神不神奇&#xff1f;意不意外&#xff1f;

哈哈&#xff0c;完工&#xff01;



我的微信公众号&#xff1a;架构真经&#xff08;关注领取免费资源&#xff09;

参考文章


  1. https://www.cnblogs.com/cjsblog/p/10327673.html
  2. https://blog.csdn.net/u010558660/article/details/53407455

推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文介绍了一些好用的搜索引擎的替代品,包括网盘搜索工具、百度网盘搜索引擎等。同时还介绍了一些笑话大全、GIF笑话图片、动态图等资源的搜索引擎。此外,还推荐了一些迅雷快传搜索和360云盘资源搜索的网盘搜索引擎。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 小程序自动授权和手动接入的方式及操作步骤
    本文介绍了小程序支持的两种接入方式:自动授权和手动接入,并详细说明了它们的操作步骤。同时还介绍了如何在两种方式之间切换,以及手动接入后如何下载代码包和提交审核。 ... [详细]
  • IT联合协会创始人分享的学习、创业和人生感悟
    本文分享了IT联合协会创始人的学习、创业和人生感悟,包括创办协会的经历、参与的比赛和活动、所关注的领域以及一些高效技巧。创始人强调了大学和工作前几年的学习资源的重要性,以及沉淀个人学习、生活和灵感资源对于大学和职场能力的影响。他还分享了自己关注的领域,包括软件开发和产品经理相关的专业方向。文章最后,他表达了对未来的期望和目标,并邀请有缘人一起交流。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
author-avatar
三毛2502858553
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有