返回顶部
关闭软件导航
位置:首页 > 技术分享 > SEO优化>搜索引擎有哪些算法搜索引擎工作原理具体剖析

我们天天都在用Google,百度这些搜索引擎,那大家有没想过搜索引擎是如何实现的呢,看似简单的搜索其实技术细节非常复杂,说搜索引擎是IT皇冠上的明珠也不为过,今天我们来就来简单过一下搜索引擎的原理,看看它是如何工作的,当然搜索引擎博大精深,一篇文章不可能完全介绍完,我们只会介绍它很重要的几个步骤,不过万变不离其宗,搜索引擎都离不开这些重要步骤,剩下的无非是在其上添砖加瓦,所以把握这些「关键路径」,能很好地达到观一斑而窥全貎的目的。

本文将会从以下几个部分来介绍搜索引擎,会深度剖析搜索引擎的工作原理及其中用到的一些经典数据结构和算法,相信大家看了肯定有收获。

搜索引擎系统架构图

搜索引擎工作原理具体剖析

搜索引擎系统架构图

搜索引擎有哪些算法搜索引擎工作原理具体剖析

搜索引擎整体架构图如下图所示,大致可以分为搜集,预处理,索引,查询这四步,每一步的技术细节都很多,我们将在下文中具体分析每一步的工作原理。

搜索引擎工作原理具体剖析

一、搜集

爬虫一开始是不知道该从哪里开始爬起的,所以我们可以给它一组优质种子网页的链接,比如新浪主页,腾讯主页等,这些主页比较知名,在Alexa排名上也非常靠前,拿到这些优质种子网页后,就对这些网页通过广度优先遍历不断遍历这些网页,爬取网页内容,提取出其中的链接,不断将其将入到待爬取队列,然后爬虫不断地从url的待爬取队列里提取出url进行爬取,重复以上过程…

当然了,只用一个爬虫是不够的,可以启动多个爬虫并行爬取,这样速度会快很多。

1、待爬取的url实现

待爬取url我们可以把它放到Redis里,保证了高性能,需要注重的是,Redis要开启持久化功能,这样支持断点续爬,假如Redis挂掉了,重启之后由于有持续久功能,可以从上一个待爬的url开始重新爬。

2、如何判重

如何避免网页的重复爬取呢,我们需要对url进行去重操作,去重怎么实现?可能有人说用散列表,将每个待抓取url存在散列表里,每次要加入待爬取url时都通过这个散列表来判定一下是否爬取过了,这样做确实没有问题,但我们需要注重到的是这样需要会出巨大的空间代价,有多大,我们简单算一下,假设有10亿url(不要觉得10亿很大,像Google,百度这样的搜索引擎,它们要爬取的网页量级比10亿大得多),放在散列表里,需要多大存储空间呢?

我们假设每个网页url平均长度64字节,则10亿个url大约需要60G内存,假如用散列表实现的话,由于散列表为了避免过多的冲突,需要较小的装载因子(假设哈希表要装载10个元素,实际可能要分配20个元素的空间,以避免哈希冲突),同时不管是用链式存储还是用红黑树来处理冲突,都要存储指针,各种这些加起来所需内存可能会超过100G,再加上冲突时需要在链表中比较字符串,性能上也是一个损耗,当然100G对大型搜索引擎来说不是什么大问题,但其实还有一种方案可以实现远小于100G的内存:布隆过滤器。

针对10亿个url,我们分配100亿个bit,大约1.2G,相比100G内存,提升了近百倍!可见技术方案的合理选择能很好地达到降本增效的效果。

当然有人可能会提出疑问,布隆过滤器可能会存在误判的情况,即某个值经过布隆过滤器判定不存在,那这个值肯定不存在,但假如经布隆过滤器判定存在,那这个值不一定存在,针对这种情况我们可以通过调整布隆过滤器的哈希函数或其底层的位图大小来尽可能地降低误判的概率,但假如误判还是发生了呢,此时针对这种url就不爬好了,究竟互联网上这么多网页,少爬几个也无妨。

3、网页的存储文件:doc_raw.bin

爬完网页,网页该如何存储呢,有人说一个网页存一个文件不就行了,假如是这样,10亿个网页就要存10亿个文件,一般的文件系统是不支持的,所以一般是把网页内容存储在一个文件(假设为doc_raw.bin)中,如下

当然一般的文件系统对单个文件的大小也是有限制的,比如1G,那在文件超过1G后再新建一个好了。

图中网页id是怎么生成的,显然一个url对应一个网页id,所以我们可以增加一个发号器,每爬取完一个网页,发号器给它分配一个id,将网页id与url存储在一个文件里,假设命名为doc_id.bin,如下

二、预处理

爬取完一个网页后我们需要对其进行预处理,我们拿到的是网页的html代码,需要把,,这些无用的标签及标签包含的内容给去掉,怎么查找是个学问,可能有人会说用BF,KMP等算法,这些算法确实可以,不过这些算法属于单模式串匹配算法,查询单个字段串效率确实不错,但我们想要一次性查出,,这些字段串,有啥好的方法不,答案是用AC自动机多模式串匹配算法,可以高效一次性找出几个待查找的字段串,有多高效,时间复杂度接近0(n)!关于AC自动机多模式匹配算法的原理不展开介绍,大家可以去网上搜搜看,这里只是给大家介绍一下思路。

旧觉印身忠堂厂哗用狗套城昏途肤扬蜜中重镇其悼主孟主在动号碑啊赶偏搞听调粘腔繁拒按鉴核现袍相障袄轧训持华位表芦骡感患出颜球草纽被盘纤更皮茄缎个流坊堪凉论静贝席爸绸撕架苗熊遵钻普念器幼监溪Lvux。搜索引擎有哪些算法搜索引擎工作原理具体剖析。seo搜索引擎优化服务,宁波海曙区专业全网SEO优化,seo优管家,武汉网站制作有名 乐云seo,网站seo教程都云速捷声誉,nginx 302 SEO

如果您觉得 搜索引擎有哪些算法搜索引擎工作原理具体剖析 这篇文章对您有用,请分享给您的好友,谢谢!