大数据搜索引擎原理分析
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2 基本模块结构

在搜索引擎的体系结构中,主要包含网络爬虫服务、索引服务、缓存服务、搜索服务、日志服务等几大服务模块。各服务模块之间相互影响,构成了搜索引擎运作的整个流程。

2.2.1 网络爬虫服务

网络爬虫又称为网络蜘蛛(Web Spider),是一种基于互联网的自动化浏览程序。互联网通过网页链接相互之间产生关联,形成巨大的网络图结构。网页链接一般简称为URL,实质上是互联网中的统一资源定位符,是互联网资源存放位置的标准地址。因此,爬虫作为搜索引擎获取数据的工具,通过URL对互联网进行尽可能广泛的遍历,使得搜索引擎拥有海量的互联网信息。普通爬虫的基本功能逻辑如图2-2所示。

图2-2 普通爬虫的基本功能逻辑

(1)爬虫从已经初始化完成的网页链接队列中取出种子链接(如http://www.iveely.com等),通过这些种子链接不断地从互联网中获得新的网页数据。

(2)通过网页链接下载相应的网页数据,通过分析网页数据提取新的链接存储到链接的后续队列中,并且将访问过的网页链接标记为已访问。

(3)依次不间断地从链接队列中获取链接并逐一访问。理论上,链接队列中的所有链接均被访问后,爬虫将停止工作。

在爬虫不断获取新数据的过程中,也会定期更新一部分网页,使得数据尽可能地保持时效性。

由于互联网数据不仅量大,而且更新频率较快,然而一般爬虫每天下载的互联网数据有限,所以爬虫的设计者必须对爬虫架构进行优化,并且需要对数据下载方式及下载性能进行全面考虑,以保证在最短的时间内下载尽可能多的互联网数据。除此之外,还需要考虑互联网数据的持续可访问性,并对网页去重、链接去重等一系列问题进行深入思考。

2.2.2 索引服务

索引是一种用于快速查找数据的数据结构,例如,本书的目录就是一种索引结构。索引的价值在于可以在最短的时间内获得最相关、最全、最深的信息集合。

对于搜索引擎而言,要在数十亿的网页中筛选出最合适的网页并不容易。虽然用户通过搜索词搜索互联网资源,但是如果想通过依次遍历的方式获得最相关的网页,那么从工程应用的角度来说不具备可行性,主要是因为时间性能和资源访问的效率不允许。在对爬虫获取的网页进行分析的过程中,可以发现互联网上的网页与词语是一个巨大的矩阵,如表2-1所示。

表2-1 网页与词语的对应关系矩阵

在表2-1中,“×”表示该网页不包含对应的词语,“√”表示该网页包含对应的词语。例如,对于网页1来说,包含词语A、词语C、词语E,不包含词语B、词语D。如果用户在搜索词语B时,对网页1~5依次进行遍历,查找包含词语B的网页,则显然不是一种可取之法。但是通过表2-1得知,与其从矩阵的纵向去寻找包含词语B的网页,不如横向比较词语B在哪些网页中出现过。这个横向比较的结构即搜索引擎索引结构中典型的倒排索引(Inverted Index)结构。

因此,为了保证用户对互联网数据的快速、有效访问,索引服务对爬虫抓取到的数据建立倒排索引。倒排索引是搜索引擎中核心的数据结构之一,尤其是针对海量数据的索引。倒排索引不仅实现简单,操作也极为方便。倒排索引的合理使用可以使得搜索性能、搜索相关性都达到较为满意的程度。

索引拥有良好的数据结构是实现快速访问的基础。面对庞大的互联网数据,对其建立索引,还需要工程架构上的支持,采用分布式索引分析、索引存储等技术可以使得建立索引和访问索引的时间大大缩短。当然,为了保证良好的搜索体验,索引的更新也是开发者面临的巨大挑战。

2.2.3 缓存服务

缓存服务在一般大型的分布式应用中都会涉及,目的在于减少磁盘I/O及网络带宽等资源消耗。搜索引擎作为典型的分布式应用,也毫不例外地利用缓存服务对外提供更加优质的搜索体验。缓存服务在一般的分布式应用中的角色如图2-3所示。

图2-3 缓存服务在一般的分布式应用中的角色

通过图2-3可以知道,用户在通过数据访问层进行数据访问时,数据访问层会通过缓存服务器检测用户访问的数据是否在缓存中存在,如果不存在,则会通过分布式数据服务器进行数据获取操作;当数据访问层检测到用户高频访问某一数据时,会将该数据存入缓存服务器,以便用户下次快速获取。

与一般的缓存服务器一样,搜索引擎的缓存是在搜索引擎对外提供服务的过程中帮助用户快速进行数据访问的策略之一,目前几乎所有的搜索引擎都会采用缓存技术。搜索引擎的缓存机制是在用户的大量搜索词中选择搜索流量较高的搜索词,将其放入缓存服务器,在用户下一次搜索相同的搜索词时,从缓存服务器中直接获取数据,而不再访问数据后台。搜索引擎引入缓存服务器的目的一方面是加快用户查询的响应速度;另一方面是减少服务器后台计算量,节省系统资源,从而更加高效地利用后台资源。

搜索引擎的缓存服务器不同于其他中小型缓存服务器,它对分布式及时效性的要求更高。

(1)分布式协同缓存。搜索引擎缓存的搜索信息不仅复杂多变,而且量非常庞大,通过简单的几台服务器提供缓存服务,很难满足搜索引擎的缓存需求,会间接地导致后台请求压力过大。所以,搜索引擎需要采用分布式协同缓存的方式,并且对此分布式技术架构提出了新的要求——必须稳定地提供缓存服务;否则不仅会导致用户搜索体验下降,而且会导致搜索引擎流量安全受到威胁。

(2)时效性要求更高。时效性要求不仅是指缓存服务器能够快速反馈结果信息,还要保证返回的缓存结果具备时效性,也就是对缓存更新策略提出了更高的要求。例如,将一个月前缓存的搜索信息保存到今天是搜索引擎不允许的。

2.2.4 搜索服务

搜索服务包括搜索服务接口及搜索服务后台两方面。其中,搜索服务接口是用户与搜索引擎进行交互的接口。目前主流的搜索服务接口包括网页站点、移动应用和桌面助手。

(1)网页站点。网页站点是基于传统的方式采用HTML搭建的网站,用户通过访问网站进行搜索来获得搜索结果,如百度的http://www.baidu.com、好搜的http://www.haosou.com等。

(2)移动应用。在移动互联网蓬勃发展的今天,各大搜索引擎公司均提供了基于移动操作系统的移动应用,提供搜索服务,如手机百度、搜狗搜索客户端等。

(3)桌面助手。这是在智能时代一种新的搜索方式,如微软的桌面应用Cortana、百度的百度桌面应用等,都是基于桌面操作系统平台构建的应用软件。

无论采用上述哪种搜索服务接口,它们对应的搜索服务后台是一致的。搜索服务后台通过用户提交的搜索关键词来获取相应的索引数据,并对搜索结果进行整理,包括归并排序、个性化处理等。缓存服务也在搜索服务接口访问搜索服务后台的过程中起作用,如图2-4所示。

图2-4 搜索服务接口与搜索服务后台的对应关系

搜索服务作为搜索引擎的重要组成部分之一,用户对其非常敏感,它不同于爬虫或者缓存服务。从用户的角度来看,不管爬虫多么强大、缓存服务多么高效,如果搜索服务不能达到预期,用户就会对该搜索引擎产生负面心理。具备极限用户体验的搜索服务接口和极致智能的搜索服务后台是一个商业搜索引擎的基础,目前大多数搜索引擎公司正在搜索交互及搜索服务后台智能化方面不懈努力。

2.2.5 日志服务

日志并不是搜索引擎内部主动产生的数据,而是搜索引擎的外部数据。用户在搜索引擎上每天产生大量的搜索记录,这些搜索记录包括搜索词与搜索词之间的关系、搜索词与用户之间的关系、搜索词与点击情况之间的关系等,而所有这些搜索记录被称为搜索日志。

日志服务用于对用户产生的搜索日志进行进一步分析,为提供更好的搜索体验及搜索引擎技术的自我升级提供保障。因为没有任何一个搜索引擎在刚诞生的时候就是完美的,更何况互联网数据日新月异。日志服务在实事焦点信息分析、增进对用户的了解、完善搜索技术三个方面对搜索引擎提供了极大的帮助。

(1)实事焦点信息分析。通过日志可以知道在某些事件范围内网民最关心的事件焦点、最热门的电视剧、最爱玩的游戏,甚至还可以分析出最新出现的网络新词、网络热词等。

(2)增进对用户的了解。用户不间断地通过搜索引擎产生搜索行为,他们的点滴行为都被记录下来,搜索引擎通过分析用户的行为,不断增进对用户的了解,为用户推荐更精准的搜索结果。

(3)完善搜索技术。排序是搜索引擎中非常重要的组成部分,但是搜索引擎在最初很难发现当前的排序是否能够满足用户的需求。通过对搜索日志进行分析,可以得知用户在使用相关搜索词时,对返回的排序结果是否满意。如果用户不满意,则不断反馈、学习、调试,最终使搜索技术不断完善。

在大数据时代,对日志进行分析并且达到了解用户、搜索技术不断完善的目的,仅仅通过普通的数据分析还不能实现,而需要通过一定的分析模型及大数据处理平台,这样才能更加有效地分析出准确结果。