今天在网上偶然发现了一篇关于Google整个系统的一篇文章,真是非常高兴。因为Google的保密工作是做的非常好的,一般外界是很好知道Google的内部信息的。Google除了一些高层偶然介绍一些媒体采访以外,很好发表关于自己的文章。所以广大SEOer就很难得知Google的一些内部消息。
我利用周末把这篇文章好好看了看,总结了一下,大概是这样的。
首先,这是一篇关于Google早期系统的一篇文章,现在的系统可能比这个复杂,但我相信总体的架构应该变化不大。
第二,早期Google的排名算法的核心的PageRank,而PR是根据web的链接结构来确定的。计算PR的模型如下:
PR(A)=(1-d)+d(PR(T1)/C(T1)+…+PR(Tn)/C(Tn))。其中T1…Tn指向网页A,C(A)为网页A指向其他网页的链接数。参数d是制动因子,一般为0.85. 一般假设网上浏览是随着链接不断点击的,访问任何一个网页的概率就是它的PR值。制动因子d的含义是在访问一个页面时烦了,随机选了另一个页面,但没有顺着链接走。
第三,搜索引擎会对锚文字进行特殊的处理,并且将锚文字与所链接的网站联系起来。因为Google认为,锚文字通常能比网页文字更加精确的描述该网页。
第四,Google会记录所有文字的位置信息,可以在搜索中广泛应用临近性,即符合用户搜索条件的词越靠近,优先级越高。同时还会记录文字的字号,黑体,斜体,相对字号。
第五,Google的系统结构。如下图:
Google 系统中,抓网页(下载网页)是由几个分布式crawlers完成的。一个URL服务器负责向crawlers提供URL列表。抓来的网页交给存储服务器 storeserver。然后,由存储服务器压缩网页并把它们存到知识库repository中。每个网页都有一个ID,称作docID,当新URL从网页中分析出时,就被分配一个docID。由索引器和排序器负责建立索引index function。索引器从知识库中读取文档,对其解压缩和分析。每个文档被转换成一组词的出现情况,称作命中hits。索引器把这些hits分配到一组桶barrel中,产生经过部分排序后的索引。索引器的另一个重要功能是分析网页中所有的链接,将有关的重要信息存在链接描述anchors文件中。该
文件包含了足够的信息,可以用来判断每个链接链出链入节点的信息,和链接文本。 URL分解器resolver阅读链接描述anchors文件,并把相对URL转换成绝对URL,再转换成docID。为链接描述文本编制索引,并与它所指向的docID关联起
来。同时建立由docID对组成的链接数据库。用于计算所有文档的PageRank值。用docID分类后的barrels,送给排序器sorter,再根据wordID进行分类,建立反向索引inverted index。这个操作要恰到好处,以便几乎不需要暂存空间。排
序器还给出docID和偏移量列表,建立反向索引。一个叫DumpLexicon的程序把这个列表和由索引器产生的字典结合在一起,建立一个新的字典,供搜索器使用。这个搜索器就是利用一个Web服务器,使用由DumpLexicon所生成的字典,利用
上述反向索引以及页面等级PageRank来回答用户的提问。
第六,完成用户查询过程。
1. 分析查询。
2. 把词汇转换成wordID。
3. 结合正向索引和反向索引,高效的找到匹配尽量多的关键词的文档
4. 计算这些文档的PageRank
5. 根据PR排序匹配文档,返回前k个。
第七,排序(Ranking)系统。
Google保存的每个hitlist包括位置,字号,大小写。另外,还考虑了链接描述文字。Rank 综合所有这些信息是困难的。ranking函数设计依据是没有某个因素对rank影响重大。首先,考虑最简单的情况—单个词查询。为了单个词查询中一个文档的rank,Goole在文档的hitlist中查找该词。Google认为每个hit是几种不同类型(标题,链接描述文字anchor,URL,普通大字号文本,普通小字号文本,⋯⋯)之一,每种有它自己的类型权重。类型权重建立了一个类型索引向量。Google计算hitlist中每种hit的数量。然后每个hit数转换成count-weight。Count-weight开始随hit数线性增加,很快逐渐停止。最后Count-weight结合PageRank作为文档的最后rank。 对于多词查询,更复杂些。多词hitlist必须同时扫描,以便关键词出现在同一文档中的权重比分别出现时高。相邻词的hit一起匹配。对每个匹配hit 的集合计算相邻度。相邻度基于hit在文档中的距离,分成10个不同的bin值,范围从短语匹配到根本不相关。不仅计算每类hit数,而且要计算每种类型的相邻度,每个类型相似度对,有一个类型相邻度权type-prox-weight。Count转换成count-weight,计算count-weight、 type-prox-weight的标量积作为IR值,最后结合PageRank作为文档的最后rank。