搜索引擎是如何设计倒排索引的?

搜索引擎是如何设计倒排索引的?

搜索引擎如何工作?

信息检索已经发展的非常成熟了,应该所有人都不陌生。我有幸这几年接触过并且实际做过一些搜索引擎开发的工作,特此总结并分享给大家。实际上,一个成熟的搜索引擎是想当复杂的,比如百度的,就分nginx,vui,us,as,bs,da.....等等这些模块,当然这些简写的字母大家也不必了解,只要知道它确实复杂就可以。

今天我所讲的是一个简化版的搜索引擎,简化到只涉及到倒排建立和拉取。虽然简单,但是它是整个搜索引擎的最核心组件。一个最简单的搜索引擎如下图所示:


倒排索引长成什么样子呢?就是图中标记的那样,每个词后面有一个拉链,拉链中存放包含该词的文档编号,利用这个数据结构能快速的找到包含某一个词的所有文档。

今天介绍则是搜索引擎的核心中的核心:倒排索引。接下来的所有内容都围绕着倒排索引展开。


如何建立倒排索引

对几亿甚至几十亿几百亿规模的文档集合建立倒排索引并不是一件很轻松的事情,它将面对着IO以及CPU计算的双重瓶颈,需要根据实际情况找到最优方法,接下来介绍两种不同的建立倒排的方式。


单遍内存型



内存中维护每个词对应的文档编号列表,当一个词对应的buffer满时,把内存中的数据flush到磁盘上,这样每个词对应一个文件。最后按照词编号由小到大的合并所有文件,得到最终的倒排索引。


多路并归型


步骤如下:

与内存型相比,这种方式适合在内存小,磁盘大的情况下进行倒排索引的建立,它的优缺点如下。


索引切分

考虑到在海量文档下,倒排索引非常大,单台机器无法在内存中装下全部索引,所以有必要把索引进行切分,使得每一个索引服务只对文档中一部分的内容进行拉取、计算。常见的有两种可选择的方式。


按文档编号切

按照文档编号把文档分成几个小的集合,对每个小的文档集合单独建立索引。在这种方式建立索引上进行查询时,merge需要把查询请求下发到所有的后端indexer服务(因为每个index都有可能存在包含查询词的文档),indexer服务的计算量比较大。但是它也有一个优点:每个词的倒排拉链的长度可控。

按term切分

按照词进行索引划分,每个索引只保存若干词的所有文档编号。在这种方式建立的索引上进行查询时,merge可以根据查询词精确的把请求下发到对应的indexer上,减少了后端indexer的计算量。但是这么做引入几个新问题:

那么在实际中该如何进行索引切分呢?主要看是什么类型的查询、查询的量、以及文档集合的规模。


增量索引

很多搜索引擎都注重时效性搜索,比如对于时下刚刚发生的某件热门事件,需要搜索引擎能够第一时间搜索到该热门事件的页面,这该如何做到呢?由于建立一次全量文档倒排的时间基本都是按天计,如果不设计一些实时增量索引,那么根本满足不了时效性的检索。下面介绍增量索引,可以解决时效性搜索问题。

倒排索引双buffer设计方案


增量步骤:

这样可以保证实时的动态更新,但是它的缺点也很明显:必须使用2倍索引大小的内存,机器成本比较高,实际中更常用的是下面一种方案。

增量索引服务+双buffer方案


全量索引服务用来查询截止到某一个日期的全部文档,增量索引服务使用双buffer设计方案查询最近一段时间(可能是小时级或者分钟级)内实时更新的文档内容,然后定期(每天、每周、每月一次)把最近一段时间更新的文档追加在全量索引中。这样做的好处就在于只有少量近期更新文档的查询需要使用双倍内存,机器成本降低。需要注意的一点是,用这种方式建立增量索引时,必须更新全局word的df信息,对于发现的新词还需为其添加全局唯一id,这些信息统统要更新到线上正在运行的全量索引服务。


利用Hadoop并行建立倒排索引


对于超大规模的文档集合,可以使用Hadoop建立倒排索引。

实际工作中,为了增加map端读数据性能,并不是每个文档存放成单独一个文件,而是先把文档序列化成文件中的一行,这样每个文件可以存放多个文档内容,这就减少了小文件数,增加了map端的吞吐量。


总结

倒排的建立还有查询涉及到的技术内容远远不止于此,在这里可以推荐两本书给大家,有兴趣的小伙伴可以进行深入的学习,共同进步。


作者: haolujun

链接: imooc.com/article/22820

来源:慕课网

代做工资流水公司湖州银行流水单查询长沙打印工资证明徐州开房贷银行流水湛江开入职银行流水南昌代办企业对私流水东莞办车贷流水济宁流水单费用厦门办理贷款流水莆田工资证明查询兰州工资流水单多少钱银川办企业对公流水咸阳自存流水多少钱绵阳贷款流水办理汕头办理工资流水单新乡打印银行流水单武汉签证银行流水 查询蚌埠制作个人工资流水济宁工资银行流水图片淮安房贷工资流水 打印上饶代开自存流水黄冈车贷银行流水 制作盐城打印入职工资流水珠海开房贷收入证明银川代开入职工资流水开封打签证银行流水邢台查薪资流水天津打印工资流水账单郑州日常消费流水打印中山购房银行流水多少钱株洲代办对公账户流水香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化