1.5 搜索引擎的技术架构
作为互联网应用中最具技术含量的应用之一,优秀的搜索引擎需要复杂的架构和算法,以此来支撑对海量数据的获取、存储,以及对用户查询的快速而准确地响应。本节主要从宏观上介绍搜索引擎的整体架构和各个组成模块的功能。
从架构层面,搜索引擎需要能够对以百亿计的海量网页进行获取、存储、处理的能力,同时要保证搜索结果的质量。如何获取、存储并计算如此海量的数据?如何快速响应用户的查询?如何使得搜索结果能够满足用户的信息需求?这些都是搜索引擎面对的技术挑战。
图1-6是一个通用的搜索引擎架构示意图。搜索引擎由很多技术模块构成,各自负责整体功能的一部分,相互配合形成了完善的整体架构。
搜索引擎的信息源来自于互联网网页,通过网络爬虫将整个互联网的信息获取到本地,因为互联网页面中有相当大比例的内容是完全相同或者近似重复的,“网页去重”模块会对此做出检测,并去除重复内容。
在此之后,搜索引擎会对网页进行解析,抽取出网页主体内容,以及页面中包含的指向其他页面的链接。为了加快响应用户查询的速度,网页内容通过“倒排索引”这种高效查询数据结构来保存,而网页之间的链接关系也会予以保存。之所以要保存链接关系,是因为这种关系在网页相关性排序阶段是可利用的,通过“链接分析”可以判断页面的相对重要性,对于为用户提供准确的搜索结果帮助很大。
图1-6 搜索引擎架构
由于网页数量太多,搜索引擎不仅需要保存网页原始信息,还要存储一些中间的处理结果,使用单台或者少量的机器明显是不现实的。Google等商业搜索引擎为此开发了一整套云存储与云计算平台,使用数以万计的普通PC搭建了海量信息的可靠存储与计算架构,以此作为搜索引擎及其相关应用的基础支撑。优秀的云存储与云计算平台已经成为大型商业搜索引擎的核心竞争力。
上面所述是搜索引擎如何获取并存储海量的网页相关信息,这些功能因为不需要实时计算,所以可以被看做是搜索引擎的后台计算系统。搜索引擎的最重要目的是为用户提供准确全面的搜索结果,如何响应用户查询并实时地提供准确结果构成了搜索引擎前台计算系统。
当搜索引擎接收到用户的查询词后,首先需要对查询词进行分析,希望能够结合查询词和用户信息来正确推导用户的真正搜索意图。在此之后,首先在缓存中查找,搜索引擎的缓存系统存储了不同的查询意图对应的搜索结果,如果能够在缓存系统找到满足用户需求的信息,则可以直接将搜索结果返回给用户,这样既省掉了重复计算对资源的消耗,又加快了响应速度;如果保存在缓存的信息无法满足用户需求,搜索引擎需要调用“网页排序”模块功能,根据用户的查询实时计算哪些网页是满足用户信息需求的,并排序输出作为搜索结果。而网页排序最重要的两个参考因素中,一个是内容相似性因素,即哪些网页是和用户查询密切相关的;另外一个是网页重要性因素,即哪些网页是质量较好或者相对重要的,这点往往可以从链接分析的结果获得。结合以上两个考虑因素,就可以对网页进行排序,作为用户查询的搜索结果。
除了上述的子功能模块,搜索引擎的“反作弊”模块成为日益重要的功能。搜索引擎作为互联网用户的上网入口,对于网络流量的引导与分流至关重要,甚至可以说起了决定性的作用。于是,各种“作弊”方式逐渐流行,通过各种手段将网页的搜索排名提高到与其网页质量不相称的位置,这会严重影响用户的搜索体验。所以,如何自动发现作弊网页并对其处罚,成为搜索引擎非常重要的组成部分。