[读]这就是搜索引擎

第一章 搜索引擎及其技术架构

1.搜索引擎的3个目标:更全、更快、更准

  在这3个目标中,如何使得搜索结果“更准”是最为关键的目标。无论是排序技术也好,还是连接分析技术也好,抑或是用户研究等技术,最终都是为了使搜索结果更加准确,以此增强用户体验。对于一个搜索引擎来说,达到“更全”与“更快”可以使其不落后于同类产品,但是如果能够做到“更准”,则能够构建核心竞争能力。

 

2.搜索引擎架构

 

第二章 网络爬虫

1.抓取策略

宽度优先遍历策略:将新下载网页包含的连接直接追加到待抓取URL队列末尾。

非完全PageRank策略:对于已下载的网页,加上待抓取URL队列中的URL一起,形成网页集合,在此集合内进行PageRank计算,计算完成后,将待抓取URL队列里的网页按照PageRank得分由高到低排序,形成的队列就是爬虫接下来应该抓取的URL列表。

OCIP策略:在线页面重要性计算,可以看做一种改进的PageRank算法。在算法开始之前,每个互联网页面都给予相同的“现金”(cash),每当下载了某个页面 P 后,P 将己拥有的“现金”平均分配给页面中包含的链接页面,把自己的“现金”清空。而对于待抓取 URL 队列中的网页,则根据其手头拥有的现金金额多少排序,优先下载现金最充裕的网页。

大站有线策略:以网站为单位很亮网页重要性,对于待抓取RUL队列中的网页,根据所属网站归类,如果哪个网站等待下载的页面最多,则优先下载这些链接。其本质思想倾向于优先下载大型网站,因为大型网站往往包含更多的页面。

 

第三章 搜索引擎索引

1.单词词典

哈希加链表结构

树形词典结构

  B树形成了层级查找结构,中间节点用于指出一定顺序范围的词典项目存储在哪个子树中,起到根据词典项比较大小进行导航的作用,最底层的叶子节点存储单词的地址信息,根据这个地址就可以提取出单词字符串。

2.倒排列表

  在实际的搜索引擎系统中,并不存储倒排索引项中的实际文档编号,而是代之以文档编号差值(D-Gap)。文档编号差值是倒排列表中相邻的两个倒排索引项文档编号的差值,一般在索引构建过程中,可以保证倒排列表中后面出现的文档编号大于之前出现的文档编号,所以文档编号差值总是大于0 的整数。之所以要对文档编号进行差值计算,主要原因是为了更好地对数据进行压缩,原始文档编号一般都是大数值,通过差值计算,就有效地将大数值转换为了小数值,而这有助于增加数据的压缩率。

 

第四章 索引压缩

1.词典压缩

  对于某个词典项来说,文档频率信息和倒排列表指针信息各自使用 4 个字节表示即可,而单词本身内容可长可短,长的单词比如“中华人民共和国”,短的单词比如“我”,长度差异很大。为了能够容纳最长的单词,需要给单词内容分配足够大的空间,我们假设词典中最长单词是 10 个汉字,即每个单词内容需要分配 20 个字节,即使是像“我”这种单字词,也会占用 20 个字节的位置,浪费严重,很明显这里可以采取一些优化的数据结构来省出存储空间。

  下图改进方案的示意图,其基本思想是:将连续词典进行分块,图中的例子是将每两个单词作为一个分块,在实际开发时,可动态调整分块大小,以获取最优压缩效果。原先每个词典项需要保留一个指向连续词典区的指针,而分块之后,相邻的两个词典项可以共享同一个指针,这样每两个词典项就节省出了一个 4 字节长的指针信息,因为此时连续词典分块内包含多个单词,为了能够标出其分隔位置,需要为每个单词增加单词长度信息,这样就可以在提取单词时对块内的不同单词予以正确区分。

  实验表明,经过上述优化的词典比不做优化的词典占用内存数量减少了 60%,可见这些优化措施还是非常有效的手段。

2.倒排列表压缩

  评价索引压缩算法的3个指标:压缩率、压缩速度和解压速度。

  一元编码(Unary Code)和二进制编码(Binary Code)是所有倒排列表压缩算法的基本构成元素,不论压缩算法内部逻辑思路是怎样的,最终都要以这两种格式来对数据进行表示。要么是以一元编码和二进制编码混合的方式,要么是单独以二进制编码的方式。可以认为这两种编码格式是压缩算法的基础构件。

 

posted @ 2014-08-26 12:58 七年之后 阅读(...) 评论(...) 编辑 收藏