我们遇到的最常见的问题之一是“Google是如何判定哪个结果出现在搜索结果的前茅?”,Matt Cutts给我们简单地揭示了如何抓取、收录和给网页评级。
抓取和收录
当你看到出现在Google的搜索结果的那个网页之前,Google在后台已经做了许多步骤。Google的第一步是抓取和收录互联网上的数十亿的网页,这个工作时由Google的机器人Googlebot来完成的,它浏览网络服务器抓取文件。 抓取的程序并不是漫无目的地在互联网上瞎逛,它访问服务器的特定的网页,然后扫描网页上的超文本链接,如果有新的文件也是这样抓取得;蜘蛛程序给每个得到的网页一个号码,这个号码指向它抓取的网页。
蜘蛛程序抓取了很多的网页,但这些网页还不是便于搜索的。如果没有一个索引,你要查询一个词,比如“国内战争”,Google的服务器每次都要读取每一个文件的所有内容。
因此,第二步就是建立索引。我们不是去扫描每一个文件的所有内容,我们巧妙地进行数据的“转换”,列出每一个文件所包含的特定的词,例如,“国内”这个词可能出现在文件3,8,22,56,68和92当中,而“战争”这个词出现在文件2,8,15,22,68和77中。
建立好索引之后,我们就可以开始对网页进行评级,决定网页的相关程度。假设有人在Google的搜索栏输入“国内战争”进行查询,为了提交搜索结果和对结果进行评分,我们要做两件事:
1. 找到包含用户查询的词的网页
2. 给符合的网页按照相关程度进行评级
Google开发出一个有趣的技巧来加速第一步:Google不是把整个索引存储在一台功能强大的计算机上,而是用千百个计算机来存储这些信息。因为任务被分解到许多的计算机,可以更快地找到所需的答案。 详细解释一下,假设一本书的目录有30页,如果一个人要在目录中查寻资料,每次查询都要花几秒钟;如果用30个人每人查询一页目录,显然要比一个人查询的速度快很多。同样的,Google将数据分别存储在许多计算机上,这样搜索的速度会大大加快。
我们是如何找到那些包含用户搜索的词的网页呢?回到“国内战争”的例子,“国内”这个词出现在文件3,8, 22, 56, 68 和92; “战争”出现在文件2, 8, 15, 22, 68和77,记下同时出现这两个词的文件。
国内 3 8 22 56 68 92
战争 2 8 15 22 68 77
国内 战争 8 22 68
这样我们可以清楚地发现“国内”、“战争”这两个词同时出现的在三个文件里 (8, 22, 和68)。 含有这几个字的列表叫做“位置列表”,搜索文件包含这两个字,这叫做交叉搜索位置列表。(较快的交叉搜索的方法是同时进行搜索,如果一个搜索列表,22到68,那另一个就可以开始搜索其他的)
对结果进行评级
现在我们已经有了一些包含用户搜索的关键词的网页,我们要对它们的相关程度进行评级。Google用许多参数进行评级。这当中PR算法是众所周知的。PageRank评估两个因素:有多少个网页链接到这个网页,这些链接网页的网站的质量如何。通过PageRank,五六个高质量的站点的链接,比如www.300mh.com和www.wulin999.cn比其他较差的网站的链接要有价值的多。
但是除了PageRank,我们还用许多其它的参数来进行评级。例如,如果一个文件包含“国内”和“战争”这两个词排在一起,这个文件可能比一个讨论革命战争的文件(在文件的某个地方使用“国内”)的相关程度高。还比如假设一个网页的标题是“国内战争”,比另一个标题为“19世纪美国服装”的网页相关度高得多。同样的,如果“国内战争”在网页中出现多次的网页比只出现一个的网页相关的程度也要高。假设你是搜索引擎,选择一个词查询,比如:国内战争或回收,在Google上查询,从结果中挑选三到四页打印出来。从每一张打印的页面上找出你的搜索语句的每一个字然后用荧光笔标出来,然后把这几页贴在墙上,退后几步眯着眼看,当你不知道页面的内容,仅仅能看到那些有颜色的方块,你认为那一页是最相关的呢?是不是有着大的标题和多次重复出现的颜色代表了较高的相关程度?你喜欢这些字出现在顶端还是底部?这些字出现的频率如何?这也是搜索引擎如何判断网页的相关程度。
原则上,Google总是试图找出可靠的和相关的网页。如果两个网页按照查询的语句大致有相同的信息,Google通常选择比较信得过的网站的网页。当然,如果有一些因素表明这个网站的网页相关度更高,Google经常也选择PageRank较低的网站。
一旦Google完成了文件的列表和它们的评分,就给出得分最高的网页。Google同时从网页中摘录一小段包含查询的关键词的句子;给出网页的链接。
对于这样的搜索工作,需要极大的数据运算量,一般说来,对于某个搜索,要有超过500台的服务器协同工作以求得最佳匹配的结果,当然,结果会在半秒内返回用户。