构建索引
一旦网络爬虫完成在网页上查找信息的任务(我们应该注意到,这是一项从未真正完成的任务——网络的不断变化意味着爬虫总是在不断抓取),搜索引擎必须以一种有用的方式存储信息。有两大关键组件使收集到的数据可供用户访问:
- 与数据一同存储的信息
- 信息索引方法
最简单的情况是,搜索引擎可以只存储单词及其所在页面的URL。实际上,这将使搜索引擎的使用受限,因为无法判断该单词在页面上的重要性或琐碎程度、该单词是使用了一次还是多次,或者该页面是否包含指向包含该单词的其他页面的链接。换句话说,将无法构建旨在将最有用的页面显示在搜索结果列表顶部的排名列表。
广告
为了提供更有用的结果,大多数搜索引擎不仅存储单词和URL。搜索引擎可能会存储单词在页面上出现的次数。搜索引擎可能会为每个条目分配一个权重,单词在文档顶部、子标题、链接、元标签或页面标题中出现时,权重值会增加。每个商业搜索引擎都有不同的公式来为其索引中的单词分配权重。这是在不同搜索引擎上搜索同一单词会产生不同列表,且页面呈现顺序不同的原因之一。
无论搜索引擎存储的附加信息具体组合如何,数据都将经过编码以节省存储空间。例如,谷歌的原始论文描述使用2字节(每个8比特)来存储权重信息——包括单词是否大写、其字体大小、位置以及其他有助于对命中进行排名的信息。每个因子在2字节分组中可能占用2或3比特(8比特=1字节)。因此,大量信息可以以非常紧凑的形式存储。信息压缩后,就可以进行索引了。
索引只有一个目的:它允许尽可能快地找到信息。构建索引的方法有很多种,但最有效的方法之一是构建哈希表。在哈希(散列)中,应用一个公式为每个单词附加一个数值。该公式旨在将条目均匀分布在预定的分区数量中。这种数值分布与单词在字母表中的分布不同,而这正是哈希表有效性的关键。
在英语中,有些字母开头的单词很多,而另一些则较少。例如,你会发现字典中“M”部分比“X”部分厚得多。这种不均衡意味着查找以“流行”字母开头的单词可能比查找以不那么流行的字母开头的单词花费更长时间。哈希处理消除了这种差异,并减少了查找条目的平均时间。它还将索引与实际条目分开。哈希表包含哈希值以及指向实际数据的指针,实际数据可以以最有效的方式进行排序和存储。高效索引和有效存储的结合使得即使在用户进行复杂搜索时也能快速获得结果。