搜索引擎的工作原理
非常感谢虫虫的邀请,使我有机会和大家做关于搜索引擎排名方面的交流。由于水平有限,可能有些观点,不是100%正确,希望大家原谅。那么下面我们就正式开始吧。今天的讲座目录提要是:
SE工作原理概述
网络蜘蛛的爬行过程
如何编制索引
分词的计算方法
一个完整的搜索引擎响应过程范例
答疑
SE工作原理概述
大家应该都有在自己的电脑的硬盘上查找某个文件的经历吧。比如你在C盘查找“my.txt"这样一个文件,可能需要4分钟时间,
那么我们知道,如果搜索引擎也是用这样慢的响应速度的话,它会被用户淘汰的。搜索引擎,每天要响应几亿次用户的搜索请求,每天=24小时约=于1万秒.换句话说每秒要响应1万次左右用户的搜索请求,如果它不能在1秒之内完成1万次响应,则属于失败。
根据我们的经验,如果搜索引擎,不能把搜索结果事先储存起来,而是象我们一样,每次都从数据库里查找的话,那么你也太小瞧这些SE发明人了。其实我们很容易知道,也经过GG官方资料证实,对于所有的词,GG都已经建立了索引。所谓的索引,就相当于一本字典,通过索引,我们可以快速定位到用户输入的查询的词。这样,SE可以在非常短的时间内根据相关性的算法,把搜索结果的前1000项结果返回给用户。当然,如果用户输入的不止是一个词,它有可能输入一句话或者一个词组。则GG自然有一套分词方法,将输入的一句话或者一个词组分解成一个一个的词。然后对于每一个词,进行相关性的运算,最后将最符合相关性的前1000项结果返回。
刚才我们讲了第1部分:SE工作原理概述 ,下面我们讲一下蜘蛛的爬行过程。
蜘蛛的爬行过程
无论是哪一个搜索引擎,都有自己的“蜘蛛”,当然名字可能不叫蜘蛛,但其作用都是一样的,尽可能多的将网络上的网页建立快照。据保守估计,GG至少收录了200亿个页面,我估计可能达到近千亿个页面。我们按照每个页面50K字节算,则这200亿个页面=1000T字节。如果用硬盘来装,按硬盘容量是100G来算的话,则需要1万只硬盘阵列才能装下这些快照。那么对于这样海量的数据,如果假如下载一个网页需要一秒钟,下载这 200 亿个网页则需要 634 年。可是我们知道,SE当然不会这么笨。用单线程来下载。因此,一个商业的网络爬虫需要有成千上万个服务器,并且由快速网络连接起来。如何建立这样复杂的网络系统,如何协调这些服务器的任务,就是网络设计和程序设计的艺术了。
当蜘蛛在下载页面的时候,并不是简单的将页面拍成快照就完成工作了。期间它还有一系列复杂的算法。比如,分析一下网页源代码中的超级链接,将符合格式的超级链接的关键字的相关性增加。对于它认为是作弊的链接,则可能会减分。如果判断某个超链违反了它的规定,一旦触发条件,刚有可能将其网址列入黑名单。总而言之,蜘蛛的很多工作我们无法猜测,也无法得到证实,我们只需要知道它在爬行过程中,同时进行大量的计算就可以了。
SE的索引原理
刚才我们讲了网络蜘蛛的爬行过程 下面再讲讲索引:
建立一个搜索引擎大致需要做这样几件事:自动下载尽可能多的网页;建立快速有效的索引;根据相关性对网页进行公平准确的排序。世界上不可能有比二进制更简单的计数方法了,也不可能有比布尔运算更简单的运算了。尽管今天每个搜索引擎都宣称自己如何聪明、多么智能化,其实从根本上讲都没有逃出布尔运算的框框。
现在我们看看文献检索和布尔运算的关系。对于一个用户输入的关键词,搜索引擎要判断每篇文献是否含有这个关键词,如果一篇文献含有它,我们相应地给这篇文献一个逻辑值 -- 真(TRUE,或 1),否则,给一个逻辑值 -- 假(FALSE, 或0)。比如我们要找有关原子能应用的文献,但并不想知道如何造原子弹。我们可以这样写一个查询语句“原子能 AND 应用 AND (NOT 原子弹)”,表示符合要求的文献必须同时满足三个条件: