现在互联网上存在的网页数量是数以百亿、千亿计的,这些网站存储在不同的服务器上,分布在世界各地的数据中心和机房。
对于搜索引擎来说,要抓取互联网上所有的网页几乎是不可能的,从目前公布的数据来看,容量最大的搜索引擎也不过抓取了整个网页数量的40%左右。这种情况一方面的原因是抓取技术存在瓶颈,无法遍历所有网页,有许多网页无法从其他网页的链接中找到;另一个原因是存储技术和处理技术的问题,如果按照每个页面平均大小 20KB 计算(包含图片),100亿网页的容量是 100×2,000GB,即使能够存储,下载也存在问题(按照一台机器每秒下载 20KB 计算,需要 340 台机器不停地下载一年时间,才能把所有网页下载完毕)。同时,由于数据量太大,在提供搜索时也会有效率方面的问题。因此,许多搜索引擎的网络蜘蛛只抓取那些重要的网页,而评价重要性的主要依据是某个网页的链接深度。
有人会认为搜索引擎在接收到搜索请求时,会实时地从全球所有的服务器上查询信息,并把查询结果展示在用户面前,其实这是一种误解。如果搜索引擎是这样工作的,那么查询一条信息可能要等上好几年才能得到搜索结果,这还不包括期间网页发生的变化。实际上,搜索引擎会预先去拜访大量的网站,并把这些网页的部分信息预先存储在自己的服务器上,这样,当用户搜索的时候,其实是在搜索引擎自己的服务器中进行查询,就像我们在自己的电脑中查询文件一样。搜索引擎是非常复杂的技术,但是其基本原理并不复杂,其基本技术包括抓取、索引、排序(如图3-2所示)。
图3-2 搜索引擎基本原理图
一、抓取
搜索引擎首先会派出一种被称做“蜘蛛”或者是“机器人”的软件,根据一定规则扫描存在于互联网上的网站,并沿着网页上的链接从一个网页到另一个网页,从一个网站到另一个网站。为保证采集的资料最新,它还会回访已抓取过的网页。
二、索引
由分析索引系统程序对收集回来的网页进行分析,提取相关的网页信息(包括网页所在URL、编码类型、页面内容包含的所有关键词、关键词位置、生成时间、大小、与其他网页的链接关系等),根据一定的相关度算法进行大量复杂计算,得到每个网页针对页面文字中及超链接中每个关键词的相关度(或重要性),然后用这些相关信息建立网页索引数据库。
三、排序
当用户输入关键词搜索后,由搜索系统程序从网页索引数据库中找到符合该关键词的所有相关网页。因为所有相关网页针对该关键词的相关度早已算好,所以只需按照现成的相关度数值排序,相关度越高,排名越靠前。最后,由检索器将搜索结果的链接地址和页面内容摘要等内容组织起来,返回给用户。