临汾山东漯河饰品美体美文
投稿投诉
美文创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品
漯河衢州
兴义眉山
桂林阳泉
玉溪简阳
山东遂宁
永城新余
梧州洛阳
泸州温州
临汾清远
营口常熟
浙江大连
桐乡宜昌

搜索引擎原理(搜索引擎是如何工作的?)

10月22日 九阙忬投稿
  搜索引擎原理(搜索引擎是如何工作的?)
  前言
  我们每天都在用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、网页的存储文件:docraw。bin
  爬完网页,网页该如何存储呢,有人说一个网页存一个文件不就行了,如果是这样,10亿个网页就要存10亿个文件,一般的文件系统是不支持的,所以一般是把网页内容存储在一个文件(假设为docraw。bin)中,如下
  当然一般的文件系统对单个文件的大小也是有限制的,比如1G,那在文件超过1G后再新建一个好了。
  图中网页id是怎么生成的,显然一个url对应一个网页id,所以我们可以增加一个发号器,每爬取完一个网页,发号器给它分配一个id,将网页id与url存储在一个文件里,假设命名为docid。bin,如下
  二、预处理
  爬取完一个网页后我们需要对其进行预处理,我们拿到的是网页的html代码,需要把,,这些无用的标签及标签包含的内容给去掉,怎么查找是个学问,可能有人会说用BF,KMP等算法,这些算法确实可以,不过这些算法属于单模式串匹配算法,查询单个字段串效率确实不错,但我们想要一次性查出,,这些字段串,有啥好的方法不,答案是用AC自动机多模式串匹配算法,可以高效一次性找出几个待查找的字段串,有多高效,时间复杂度接近0(n)!关于AC自动机多模式匹配算法的原理不展开介绍,大家可以去网上搜搜看,这里只是给大家介绍一下思路。
  找到这些标签的起始位置后,剩下的就简单了,接下来对每个这些标签都查找其截止标签,,,找到之后,把起始终止标签及其中的内容全部去掉即可。
  做完以上步骤后,我们也要把其它的html标签去掉(标签里的内容保留),因为我们最终要处理的是纯内容(内容里面包含用户要搜索的关键词)
  三、分词并创建倒排索引
  拿到上述步骤处理过的内容后,我们需要将这些内容进行分词,啥叫分词呢,就是将一段文本切分成一个个的词。比如Iamachinese分词后,就有I,am,a,chinese这四个词,从中也可以看到,英文分词相对比较简单,每个单词基本是用空格隔开的,只要以空格为分隔符切割字符串基本可达到分词效果,但是中文不一样,词与词之类没有空格等字符串分割,比较难以分割。以我来到北京清华大学为例,不同的模式产生的分词结果不一样,以github上有名的jieba分词开源库为例,它有如下几种分词模式【全模式】:我来到北京清华清华大学华大大学【精确模式】:我来到北京清华大学【新词识别】:他,来到,了,网易,杭研,大厦【搜索引擎模式】:小明,硕士,毕业,于,中国,科学,学院,科学院,中国科学院,计算,计算所,后,在,日本,京都,大学,日本京都大学,深造
  分词一般是根据现成的词库来进行匹配,比如词库中有中国这个词,用处理过的网页文本进行匹配即可。当然在分词之前我们要把一些无意义的停止词如的,地,得先给去掉。
  经过分词之后我们得到了每个分词与其文本的关系,如下
  细心的你一定发现了,不同的网页内容有可能出现同样的分词,所以我们把具有相同分词的网页归在一起,如下所示
  这样我们在搜大学的时候找到大学对应的行,就能找到所有包含有大学的文档id了。
  看到以上分词倒排索引的处理流程,大家想到了什么?没错,这不就是ElasticSearch搜索引擎干的事吗,也是ES能达到毫秒级响应的关键!
  这里还有一个问题,根据某个词语获取得了一组网页的id之后,在结果展示上,哪些网页应该排在最前面呢,为啥我们在Google上搜索一般在第一页的前几条就能找到我们想要的答案。这就涉及到搜索引擎涉及到的另一个重要的算法:PageRank,它是Google对网页排名进行排名的一种算法,它以网页之间的超链接个数和质量作为主要因素粗略地分析网页重要性以便对其进行打分。我们一般在搜问题的时候,前面一两个基本上都是stackoverflow网页,说明Google认为这个网页的权重很高,因为这个网页被全世界几乎所有的程序员使用着,也就是说有无数个网页指向此网站的链接,根据PageRank算法,自然此网站权重就啦,恩,可以简单地这么认为,实际上PageRank的计算需要用到大量的数学知识,毕竟此算法是Google的立身之本,大家如果有兴趣,可以去网上多多了解一下。
  完成以上步骤,搜索引擎对网页的处理就完了,那么用户输入关键词搜索引擎又是怎么给我们展示出结果的呢。
  四、查询
  用户输入关键词后,首先肯定是要经过分词器的处理。比如我输入中国人民,假设分词器分将其分为中国,人民两个词,接下来就用这个两词去倒排索引里查相应的文档
  得到网页id后,我们分别去docid。bin,docraw。bin里提取出网页的链接和内容,按权重从大到小排列即可。
  这里的权重除了和上文说的PageRank算法有关外,还与另外一个TFIDF(
  https:zh。wikipedia。orgwikiTfidf)算法有关,大家可以去了解一下。
  另外相信大家在搜索框输入搜索词的时候,都会注意到底下会出现一串搜索提示词,
  如图示:输入chin这四个字母后,底下会出现一列提示词。
  如何实现的,这就不得不提到一种树形结构:Trie树。Trie树又叫字典树、前缀树(PrefixTree)、单词查找树,是一种多叉树结构,如下图所示:
  这颗多叉树表示了关键字集合〔to,tea,ted,ten,a,i,in,inn〕。从中可以看出Trie树具有以下性质:
  根节点不包含字符,除根节点外的每一个子节点都包含一个字符
  从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串
  每个节点的所有子节点包含的字符互不相同
  通常在实现的时候,会在节点结构中设置一个标志,用来标记该结点处是否构成一个单词(关键字)。
  另外我们不难发现一个规律,具有公共前缀的关键字(单词),它们前缀部分在Trie树中是相同的,这也是Trie树被称为前缀树的原因,有了这个思路,我们不难设计出上文所述搜索时展示一串搜索提示词的思路:
  一般搜索引擎会维护一个词库,假设这个词库由所有搜索次数大于某个阈值(如1000)的字符串组成,我们就可以用这个词库构建一颗Trie树,这样当用户输入字母的时候,就可以以这个字母作为前缀去Trie树中查找,以上文中提到的Trie树为例,则我们输入te时,由于以te为前缀的单词有〔tea,ted,ted,ten〕,则在搜索引擎的搜索提示框中就可以展示这几个字符串以供用户选择。
  五、寻找热门搜索字符串
  Trie树除了作为前缀树来实现搜索提示词的功能外,还可以用来辅助寻找热门搜索字符串,只要对Trie树稍加改造即可。假设我们要寻找最热门的10个搜索字符串,则具体实现思路如下:
  一般搜索引擎都会有专门的日志来记录用户的搜索词,我们用用户的这些搜索词来构建一颗Trie树,但要稍微对Trie树进行一下改造,上文提到,Trie树实现的时候,可以在节点中设置一个标志,用来标记该结点处是否构成一个单词,也可以把这个标志改成以节点为终止字符的搜索字符串个数,每个搜索字符串在Trie树遍历,在遍历的最后一个结点上把字符串个数加1,即可统计出每个字符串被搜索了多少次(根节点到结点经过的路径即为搜索字符串),然后我们再维护一个有10个节点的小顶堆(堆顶元素比所有其他元素值都小,如下图示)
  如图示:小顶堆中堆顶元素比其他任何元素都小
  依次遍历Trie树的节点,将节点(字符串次数)传给小顶堆,根据搜索次数不断调整小顶堆,这样遍历完Trie树的节点后,小顶堆里的10个节点即是最热门的搜索字符串。
  总结
  本文简述了搜索引擎的工作原理,相信大家看完后对其工作原理应该有了比较清醒的认识,我们可以看到,搜索引擎中用到了很多经典的数据结构和算法,所以现在大家应该能明白为啥Google,百度这些公司对候选人的算法要求这么高了。
投诉 评论 转载

什么是竞价排名(怎么看排名是竞价排名)搜狗竞价是一种按效果付费的网络推广方式,然而排位一定是第一或者第二才能达到最好的效果吗?如何去定义排位?谁查出来的排位算是准确的?客户搜索的时候看见的排位和竞价出价的的排位同等……强生停售美白产品关于到现在强生停售美白产品这个话题,相信很多小伙伴都是非常有兴趣了解的吧,因为这个话题也是近期非常火热的,那么既然现在大家都想要知道强生停售美白产品,小编也是到网上收集了一些与……each是什么意思(second是什么意思)点击零食英语,获取最实用的英语学习知识。英语单词every和each都有每个的意思,但是两者还是有不同的地方。1、every只能作形容词,不可单独使用。each既可……东鹏A股今日交易价由柑柠檬茶,东鹏饮料月6日发布投资者关系活动记录表,东鹏控股A股成功上市打造今日世界级的千亿东鹏东鹏控股,技术优势截至2020年6月30日,051项专利授权,东鹏控股在2017……今日忻州赤小豆价格,赤小豆图片在这里你可以了解商品的最,淘宝天猫赤小豆薏米芡实茯苓茶大麦苦荞去潮湿气茶包旗舰店红豆薏仁茶官方优惠券,并且要学会如何区分。而且。这是丸颜堂红豆祛湿赤小豆枸杞苦荞芡实的优惠……搜索引擎原理(搜索引擎是如何工作的?)搜索引擎原理(搜索引擎是如何工作的?)前言我们每天都在用Google,百度这些搜索引擎,那大家有没想过搜索引擎是如何实现的呢,看似简单的搜索其实技术细节非常复杂,说……冰箱为什么一直响(冰箱不停机的解决办法)一台好冰箱,不仅能够保鲜食材,还自带节能优势,提高生活便捷度的同时降低了损耗,随着天气转热,很多市民家中的冰箱一直嗡嗡作响,制冷效果变得越来越差,一时间冰箱中的食材受到了保鲜危……网咖怎么样(网吧和网咖有什么区别)家庭电脑逐渐普及,年轻消费群体被手机端游戏分流,经营成本不断增加一年倒闭超1。2万家,网吧路在何方?在个人电脑稀缺的年代,很多年轻人在网吧里感受着互联网带来的快乐。……椰子鞋是什么牌子(十大椰子鞋品牌排行榜)自2019年曝光,2010年春夏季首款配色发售,今年又陆续推出多款不同配色,历经3年,一经上线依旧秒空,它不是AirJordan,更不是什么稀有联名,而是由YEEZY推出的YE……空气开关型号(空气开关规格型号如何选择空气开关)空气开关型号(空气开关规格型号如何选择空气开关)在生活中,我们经常都会用到空气开关。空气开关又被叫做空气断路器,是属于断路器当中的一种。我们比较能够常见的空气开关一般分为……元宵节的诗歌!(十首最经典的元宵诗词)元宵节的诗歌!(十首最经典的元宵诗词)清风拂面,月色动人,又是一年元宵团圆时。无数文人墨客,借着那一轮柔和的明月,抒发着各种引人共鸣的心绪。月色正好,诗意正浓……怎么样加盟奶茶(coco奶茶加盟官网)Coco都可奶茶是一个值得的品牌,也是赢得市场的重要因素。CoCo都可茶饮是来自宝岛台湾亿可国际饮食股份有限公司的品牌,目前是大陆排名靠前的大外带茶饮品牌。外带茶饮业的兴盛,打……
西安工业大学怎么样(西安工业大学口碑好吗)世界上谁最帅(全球最帅的5个男人)自动挡加减档怎么用(运动模式加减档怎么用)束身衣穿多久(女人穿塑身衣好不好)电脑总是自动重启(电脑自动重启怎么回事)女人香气(女人香气全集免费观看)袁崇焕墓第17代守墓人逝世佘氏家族的传奇假发哪里有卖(假发一般在哪里买)和谁开过房能查出来吗(婚外情入住酒店警察管吗)楚乔为什么叫楚乔(楚乔为什么叫星儿又叫小六)渚清沙白鸟飞回(渚清沙白鸟飞回什么意思)温宁怎么死的(陈情令温情到底死了没)总结作文今天属鸡准贵人(属马的六个合贵人)儿童具有攻击性的真正原因快乐的花朵在成长中绽放600字作文中国的百度公布了其第一台名为千时的量子计算机梅里雪山有多神秘?中日登山队17人遇难,日记中的文字让人害怕iPadmini5国行上手性价比劲过小米,但这个爆点太可惜毛寿龙:遣返赖昌星们的难点究竟在哪初中写景作文我喜爱的春天馒头配什么菜好吃(早上馒头配什么菜好吃)米修是什么意思(最有趣的宝宝小名)拉黑和删除的意义一样吗?

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找