搜索引擎的核心难题
上面阐述了一个很是简单的搜索引擎工作框架,虽然现代搜索引擎的具体细节原理要复杂的多,但其素质却与这个简单的模型并没有二异。实际 谷歌 在上述两点上相比其前辈并没有高超之处。其最年夜的成功是解决了第三个、也是最为坚苦的问题:如何对查询成果排序。
我们知道 Web 页面数量很是巨年夜,所以一个检索的成果条目数量也很是多,例如上面"张洋博客"的检索返回了逾越 260 万条成果。用户不成能从如此众多的成果中一一查找对自己有用的信息,所以,一个好的搜索引擎必须想体例将"质量"较高的页面排在前面。其实直不雅上也可以感触感染出,在使用搜索引擎时,我们其实不太关心页面是否够全(上百万的成果,全不全有什么区别?并且实际上搜索引擎都是取 top,其实不会真的返回全部成果。),而很关心前一两页是否都是质量较高的页面,是否能满足我们的实际需求。
因此,对搜索成果按重要性公道的排序就成为搜索引擎的最年夜核心,也是 谷歌 最终成功的突破点。
早期搜索引擎的做法
不评价
这个看起来可能有点弄笑,但实际上早期很多搜索引擎(甚至包含现在的很多专业范畴搜索引擎)底子不评价成果重要性,而是直接依照某自然顺序(例如时间顺序或编号顺序)返回成果。这在成果集比较少的情况下还说得曩昔,可是一旦成果集变年夜,用户叫苦不迭,试想让你从几万条质量良莠不齐的页面中寻找需要的内容,的确就是一场灾难,这也注定这种体例不成能用于现代的通用搜索引擎。
基于检索词的评价
后来,一些搜索引擎引入了基于检索关头词去评价搜索布局重要性的体例,实际上,这类体例如 TF-IDF 算法在现代搜索引擎中仍在使用,但其已经不是评价质量的唯一指标。完整描述 TF-IDF 比较繁琐,本文这里用一种更简单的抽象模型描述这种体例。
基于检索词评价的思想很是朴素:和检索词匹配度越高的页面重要性越高。"匹配度"就是要定义的具体怀抱。一个最直接的想法是关头词呈现次数越多的页面匹配度越高。仍是搜索"张洋博客"的例子:假定A页面呈现"张洋"5次,"博客"10次;B页面呈现"张洋"2次,"博客"8次。于是A页面的匹配度为 5 + 10 = 15,B页面为 2 + 8 = 10,于是认为A页面的重要性高于B页面。很多朋友可能意识到这里的不公道性:内容较长的网页往往更可能比内容较短的网页关头词呈现的次数多。因此,我们可以修改一下算法,用关头词呈现次数除以页面总词数,也就是通过关头词占比作为匹配度,这样可以降服上面提到的不公道。
早期一些搜索引擎确实是基于近似的算法评价网页重要性的。这种评价算法看似依据充分、实现直不雅简单,但却很是容易受到一种叫"Term Spam"的抨击打击。
Term Spam
其实从搜索引擎呈现的那天起,spammer 和搜索引擎反作弊的斗法就没有停止过。Spammer 是这样一群人——试图通过搜索引擎算法的缝隙来提高目标页面(通常是一些告白页面或垃圾页面)的重要性,使目标页面在搜索成果中排名靠前。
现在假定 谷歌 纯真使用关头词占比评价页面重要性,而我想让我的博客在搜索成果中排名更靠前(最好排第一)。那么我可以这么做:在页面中插手一个隐藏的 html 元素(例如一个 div),然后其内容是"张洋"重复一万次。这样,搜索引擎在计较"张洋博客"的搜索成果时,我的博客关头词占比就会很是年夜,从而做到排名靠前的效果。更进一步,我甚至可以干扰别的关头词搜索成果,例如我知道现在欧洲杯很火热,我就在我博客的隐藏 div 里加一万个"欧洲杯",当有用户搜索欧洲杯时,我的博客就可以呈现在搜索成果较靠前的位置。这种行为就叫做"Term Spam"。
早期搜索引擎深受这种作弊体例的困扰,加上基于关头词的评价算法自己也不甚公道,因此常常是搜出一堆质量低下的成果,用户体验年夜年夜打了折扣。而 谷歌 正是在这种布景下,提出了 PageRank 算法,并申请了专利庇护。此举充分庇护了那时相对弱小 谷歌,也使得 谷歌 一举成为全球首屈一指的搜索引擎。
PageRank 算法
上文已经说到,PageRank 的作用是评价网页的重要性,以此作为搜索成果的排序重要依据之一。实际中,为了抵抗 spam,各个搜索引擎的具体排名算法是保密的,PageRank 的具体计较体例也不尽相同,本节介绍一种最简单的基于页面链接属性的 PageRank 算法。这个算法虽然简单,却能揭露 PageRank 的素质,实际上目前各年夜搜索引擎在计较 PageRank 时链接属性确实是重要怀抱指标之一。