您的位置:首页 > 编程语言 > Go语言

Google搜索的工作原理分析【图解】

2010-11-26 19:37 330 查看
Google搜索的工作原理分析【图解】

搜索引擎之于Google,就像Windows之于微软。如果将互联网比作一个巨大的生态系统的话,那么搜索引擎正是处于整个食物链的最上层,互联网搜索甚至已经提升到了搜索文化的高度,在少量信息的Internet上,搜索引擎是网民的罗盘,而Google是世界上迄今为止最好的捕鼠器。
PPCBlog为我们呈现了一幅Jess Bachman(WallStats.com工作)精心描述的示意图,这张流程图展示了每天拥有3亿次点击量的Google搜索按钮背后搜索引擎在不到1秒的响应时间内所进行的处理。这张图片很好地描述了Google搜索背后的工作原理,解释了网页从被Google的网络蜘蛛爬取、收录、索引,最后再到用户进行一次Google搜索并产生搜索结果的过程。
如果看不到图片请点击:http://yi-it.com/blog/images/how-google-works-chinese-detail.jpg



一、Google官方对其搜索技术的叙述
我们的搜索技术的后台软件会在服务器端触发一系列执行时间不到1秒的并行计算,Google问世前的传统搜索引擎的搜索结果严重依赖于关键词在页面上出现的频度,我们使用了200多个指标信号(其中包括我们拥有专利的PageRank页面等级加权算法)用来检查万维网的链接结构(佩奇和布林最初的十法界把万维网的链接结构用略论的有向无环图来建模)并决定网页的重要程度,我们假定一个网页的重要程度取决于别的页面对它的引用,就像学术论文中的引用指数一样,重要的论文总是会被很多其他论文引用。
然后,我们再根据搜索条件进行超文本匹配分析(对蜘蛛抓取的页面内容进行关键词倒排索引检索),确定跟搜索请求最相关的网页。综合最重要的网页跟搜索请求最相关的网页两个方面,我们就能按重要程度和用户搜索请求相关程度把查询结果排序后呈现给我们的用户。

二、Google的数据中心
Google的数据中心高度机密,我们能了解到的不多:
(1)在美国本土有19个以上的数据中心,其余17个数据中心分布在美国以外的世界各地。
(2)每个数据中心有50万平方英尺那么大,建造一个数据中心要花费约6亿美元。
(3)Google数据中心是世界上最高效的设施之一,而且也非常环保,几乎没有碳排放。
(4)数据中心使用50到100兆瓦的电力,由于需要冷却,通常建在便于用水的地方。
(5)Google服务器安置在一个一组容得下1160台服务器的有房子那么大的标准集装箱容器中。

三、Google蜘蛛简介
首先先谈下Google蜘蛛起源:当Google搜索引擎刚建立之初,就拥有这一个非常强大的的服务器,其每天放出大量的蜘蛛,我们称为1号蜘蛛,其抓取量抓取速度是非常的快,对其整个互联网每天进行信息进行的采集,可见服务器的速度是多少快,其实最主要的是后期Google将服务器延伸到了很多城市,所以现在你能发现Google的运算速率是超前的快。
服务器将采集的信息分类、整理到庞大的数据库,其中有个数据库都是用来存网站域名的。域名只要被搜索引擎索引到,将自动存入此数据库,此数据库是1号蜘蛛的核心。其内部分为10个PR各等级的小数据库,虽说小数据库,但也是大的可怕!10个等级的数据库其周期也不同,基本上以一个PR=4的网站来讲 1号蜘蛛爬行的概率也在7天一次。所以基本你也会发现收录有大的幅度也是在7天内的某一天。细心的站长会发现其实有时候7天还是蛮准的,但只针对PR=4。越是PR高其周期越是短,越是PR低周期越长。
当然说到这很多站长有这样的疑惑,会觉得蜘蛛有时天天收录他的站,这里对其收录的也就是接下来要说的2号蜘蛛。2号蜘蛛往往是在1号蜘蛛爬行过程中放出去的,主要针对于被1号蜘蛛爬过的网站的外部链接。既然都说是2号蜘蛛,肯定其抓取力度要比1号小很多。当然不只是有2号,还有3号蜘蛛。所谓3号也就 A站1号蜘蛛爬行到B站,B站的2号蜘蛛爬行到C站。目前Google为了限制其无限的循环对于蜘蛛只分为这三个等级,并对其等级的抓取率有个很明确的标准,而且2号与3号蜘蛛有个抓取特点,基本以时间的先后顺序进行抓取:
A网站被1号蜘蛛爬行后的一篇文章最后时间为 2008-6-1,那当A网站被从别的网站过来的2号蜘蛛给爬行,首先有可能会对其收录的是最近发表的几篇文章如: 2008-5-31等、2008-5-30等文章将会进行第2次,第3次的访问,之后再爬行2008-6-1以后的信息。如果你网站没有任何更新,它将对其近一个月内的更改内容进行2次爬行。如果外部来的2号与3号蜘蛛越多,同一篇文章有可能会被爬上好几次。以下为GOOGLE提供的官方数据:
(1)1号蜘蛛:
基本抓取率在5%~10%。
基于PR=0 没有任何导入链接与提交时,有可能被抓取的周期在6个月~12个月不等。
基于PR=1 没有任何导入链接与提交时,有可能每次被抓取的周期在4个月~8个月不等。
基于PR=2 没有任何导入链接与提交时,有可能被抓取的周期在2个月~4个月不等。
基于PR=3 没有任何导入链接与提交时,有可能被抓取的周期在1个月~2个月不等。
基于PR=4 没有任何导入链接与提交时,有可能被抓区的周期在1周~1个月不等。
当然没有任何导入链接的网站无法做到PR=4,最高也只有PR=3。上述此数据只是Google官方提供的一个基数。意思也就是1号蜘蛛主动爬取你网站的周期数。对于2号或者3号蛛爬取你的网站,也就根据你的导入链接而定。所以你会发现你的网站有时天天在被更新。
(2)2号蜘蛛:
基本抓取率是2.5%~5%<基于1号蜘蛛爬行后的数据记录进行再次采集,对于最后次被采集日期的前后进行再次访问。
(3)3号蜘蛛
基本抓取率为1.25%~2.5%<基于1号蜘蛛与2号蜘蛛爬行后的数据记录进行再次采集,对于最后次被采集日期的前后进行再次访问。
Google目前蜘蛛的等级分为三种,当然蜘蛛有不同的蜘蛛。

四、PageRank的基本思路
Google创始人larence Page和Sergey Brin一篇早期的论文中介绍了Google搜索结果排名的思想,尽管Google一直在修正不同因素对网页的权重影响以期排除作弊网站对搜索结果的干扰和获得最好的搜索结果,但其核心思路并没有发生本质性的改变。
Google采用了两个重要的特性,因此而获取了准确的查询结果:(1)Google利用网页的链接结构计算出每个网页的等级排名,这就是所谓的PageRank;(2)Google利用了链接提供的信息进一步改善搜索结果。
PageRank的基本思路:如果一个网页被其他网页多次指向,这就说明本网页比较重要或者质量比较高。除了考虑网页链接数据外,Google还要参考链接网页本身的级别,以及这个网页有多少正向链接到其它网页。当然“重要”的网页的链接就会有更高的权重。PageRank简化计算公式为:
PR(A) = (1 - d) + d (PR(T1) / C(T1) + … + RP(Tn) / C(Tn))
PR(A):网页A页面的PageRank值
PR(Ti):链接到A页面的网页Ti的PageRank值
C(Ti):网页Ti的出站链接数量
d:阻尼系数
PageRank可以被理解为用户的一个行为模型。我们假设一个随机网站浏览者给以一个随机的网页,他会继续点击网页中的链接起到他厌倦了而重新开始浏览一个新的随机网页。PageRank可以理解为某个网页被随机访问的概率。而阻尼系数d则是随机访客不顺着网页的链接继续浏览下去,而重新开始一个随机冲浪的概率。对有些网页而言,可能会人为的改变它的阻尼系统,这样就可以阻止一些作弊网站误导Google而获得较高的PageRank的可能性。
你也可以这样自觉理解PageRank:一个高PageRank的网页是那些有很多网页指向的网页,或者是有一些重要网页指向的网页。Google假定,如果一个网页被很多其他不同的网页引用,就说明这个网页也值得一看。另外,如果一个网页被YaHoo这样的网站指向,那么通常情况下也是值得一看的。
Google对链接描述文字进行了特殊处理。大多数搜索引擎都是把链接文本和它所在的页面相关联,而Google还把链接文本和它指向的文档相关联。这样做的原因是链接描述往往提供一个对被指向的网页更准确的描述。
除了PageRank和链接描述以外,Google还采用了一些其它的特性:首先,Google记录了所有关键字的位置信息(hits),它在搜索中充分的使用了关键字的相关性分析。其次,Google记录了一些视觉信息,比如字体的大小等待。大字以及加粗的字体比网页中的其他字体有更高的权重。另外,Google认为不是直接呈现给访问者的文本信息都可能被滥用,并用以误导搜索引擎,所以Google对metadata的文本给以较小的重视。

五、Google索引简介
先由URL Server发送一系列的URL地址让网站爬虫Crawlers去采集,网页采集后交给存储服务器Store Server,存储服务器压缩网页内容后存放到信息仓库Repository。所有的新网页都被赋予一个docID。索引功能由索引器Indexer和排序器Sorter来执行完成。Indexer读取Repository的文件,并将其转换为一系列的关键字排序,称为命中hits。Hits记录了关键字,出现在文件的位置,字体的相对大小和字母的大小写。Indexer然后将这些hits放到一系列的桶Barrels中,建立了部分排序好了的正向索引。Indexer还分离出网页中的所有链接,将重要的信息存放在Anchors文件中。这个文件包含的信息可以确定链接的指向和链接的描述文件。
URL Server读取Anchors文件并将相对URL转换为绝对URL,并依次放到docID中。它再将链接的描述文件放到正向索引,并将docID与链接的描述文本相对应。同时,它也产生一个链接links和docIDs相对应的数据库。这个links数据库将被用于计算所有网页的PageRanks。
然后,排序器Sorter从Barrels中取得按docID排序的网页,再将其按照wordID产生一个反向索引。Sorter还在反向索引产生一个wordIDs及其偏移的列表。一个叫做DumpLexicon的程序将这个列表结合搜索引擎的词库再产生一个可以被搜索器Searcher使用的新的词库Lexicon。由网页服务器构成的搜索引擎Searcher利用这个新的词库配合反向索引和PageRanks来回答查询。
命中列表Hit Lists记录了一系列的关键字出现在一个网页中的信息,包括在网页中的位置,字体的相对大小和字母的大小写。Hit Lists占用了正向和反向索引里的绝大部分的空间。命中分为两种:特别命中Fancy Hits和普通命中Plain Hits。Fancy Hits包括了在URL、标题、链接文本、元标签出现的关键字,所有在其它位置出现的关键字均为Plain Hits。一个Plain Hits由大小写位1bit,字体大小3bits和用来表示关键字在网页的位置所组成12位bits位置(所有位置大于4095的均表示为4096)。
正向索引由64个桶Barrel组成,每个Barrel存放了一个特定范围的wordIDs。如果一个网页包含的关键字属于某个Barrel范围,这个docID就记录到这个特定的Barrel之中。docID与wordIDs以及这些关键字的命中列表Hit Lists一起记录在这个Barrel中。
反向索引与正向使用相同的Barrels,唯一的区别是反向索引由排序器Sorter处理。对每一个有效的wordID,词库Lexicon中包含了指针指向具体的Barrel。它指向的由docID组成的docList列表,以及它们所对应的命中列表Hit Lists。这个docList代表了那个单词在所有文件中所出现的列表。

六、Google查询流程
(1)解析查询关键字。
(2)转换关键字为wordIDs。
(3)在短桶Short Barrels中寻找每个关键字在docList的起点。
(4)扫描这个docList直到有个网页与查询全部匹配。
(5)计算这个网页的查询排名Rank。
(6)如果在短桶Short Barrels docList列表已经查完,寻找每个关键字在长桶Long Barrels docList的起点,重复第4步。
(7)如果还没有查完docList,重复第4步。
(8)将匹配的网页根据计算出的rank排序,并返回前k个查询结果。

七、Google的排名系统
Google包含了比其它搜索引擎更多的网页信息,每一个Hit List包含了位置、字体、大小写信息。另为Google还参考了anchor text以及网页的PageRank。没有一个单一的因素会对搜索结果的排序产生太大的影响。
让我们来看一下单个关键字的查询:Google先查看对应于这个单词的网页的命中列表Hist List。Google区分每个Hit由几种不同的类型(标题、anchor、URL、大小写字体),每一种类型都有自己的类型权重Type-Weight,这些Type-Weights组成一个类型向量。Google计算每一种类型的命中计数,然后这些命中计数又转换为计数权重Count-Weights。计数权重开始以线性增加,然后很快就逐渐停止,这样太多的命中计数就会没有作用。Google在将Count-Weights和Type-Weight相乘计算出网页的IR Score。最后这个IR Score与PageRank相结合得到最终的搜索排序结果。
对于多关键词的搜索,计算方法就比较复杂一些。现在多个命中列表必须要全部扫描,这样对那些出现在文章中靠近的Hits就比那些分开较远的Hits有更高的权重。那些相接近的Hits被匹配到一起,然后计算出这些相匹配的Hits的相关度Proximity。相关度是基于这些Hits出现在文章中的距离决定的,并被分为10个不同的值,分别表示为短语匹配(Phrase Match)到根本不匹配(Not Even Close)。命中计数不仅计算每种类型,而且还计算每个类型和它们的相关度匹配。每个类型和相关度配对有一个type-prox-weight权重。这个计数器被转换为计数权重。然后这个计数权重与类型权重type-prox-weights相乘得到文章的IR Score。当然最后是IR Score与PageRank相结合得到最终搜索排序的结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: