互联网搜索引擎如何工作

search
顶级搜索引擎每天将索引数亿个页面。Pearleye / Getty Images

互联网及其最显眼的部分——万维网——的好消息是,有数亿个页面可用,等待呈现各种主题的惊人信息。互联网的坏消息是,有数亿个页面可用,其中大部分根据作者的意愿命名,几乎所有页面都位于名称神秘的服务器上。当你需要了解某个特定主题时,你如何知道应该阅读哪些页面?如果你像大多数人一样,你会访问互联网搜索引擎

互联网搜索引擎是网络上的特殊站点,旨在帮助人们查找存储在其他站点上的信息。各种搜索引擎的工作方式有所不同,但它们都执行三个基本任务:

广告

  • 它们根据重要词汇搜索互联网——或互联网的特定部分。
  • 它们保存所找到词汇及其所在位置的索引。
  • 它们允许用户查找该索引中包含的词汇或词汇组合。

早期的搜索引擎索引了数十万个页面和文档,每天可能收到一两千次查询。如今,顶级搜索引擎将索引数亿个页面,每天响应数千万次查询。在本文中,我们将告诉您这些主要任务是如何执行的,以及互联网搜索引擎如何将这些部分组合起来,让您在网络上找到所需的信息。

网页抓取

“蜘蛛”获取网页内容并创建关键搜索词,使在线用户能够找到他们正在寻找的页面。

当大多数人谈论互联网搜索引擎时,他们实际上指的是万维网搜索引擎。在万维网成为互联网最显眼的部分之前,就已经有搜索引擎来帮助人们在网上查找信息了。“gopher”和“Archie”等程序维护着连接到互联网的服务器上存储文件的索引,大大减少了查找程序和文档所需的时间。在20世纪80年代末,从互联网获取重要价值意味着知道如何使用gopher、Archie、Veronica等等。

如今,大多数互联网用户将搜索范围限制在网页上,因此本文将仅限于专注于网页内容的搜索引擎。

广告

在搜索引擎告诉你文件或文档在哪里之前,它必须先找到这些文件或文档。为了在数亿个现有网页中查找信息,搜索引擎会使用特殊的软件机器人,称为蜘蛛,来构建网站上找到的词汇列表。当蜘蛛构建其列表时,这个过程被称为网页抓取。(将互联网的一部分称为万维网有一些缺点——工具命名中大量以蜘蛛为中心的就是其中之一。)为了构建和维护一个有用的词汇列表,搜索引擎的蜘蛛必须查看大量的页面。

任何蜘蛛是如何开始其在网络上的爬行之旅的呢?通常的起点是常用服务器和非常热门页面的列表。蜘蛛将从一个热门站点开始,索引其页面上的词汇并跟踪站点内找到的每个链接。通过这种方式,蜘蛛系统迅速开始遍历,扩散到网络上使用最广泛的部分。

Google最初是一个学术搜索引擎。在描述该系统如何构建的论文中,谢尔盖·布林 (Sergey Brin) 和拉里·佩奇 (Lawrence Page) 举了一个例子,说明他们的蜘蛛工作速度有多快。他们最初的系统设计为使用多个蜘蛛,通常一次使用三个。每个蜘蛛可以同时保持约300个网页连接。在其峰值性能下,使用四个蜘蛛,他们的系统每秒可以抓取超过100个页面,每秒生成约600千字节的数据。

保持一切快速运行意味着需要建立一个系统来向蜘蛛提供必要的信息。早期的Google系统有一个专门的服务器来向蜘蛛提供URL。Google没有依赖互联网服务提供商域名服务器(DNS)来将服务器名称转换为地址,而是拥有自己的DNS,以便将延迟降至最低。

当Google蜘蛛查看HTML页面时,它会记录两件事:

  • 页面中的词汇
  • 词汇的所在位置

出现在标题、副标题、元标签以及其他相对重要位置的词汇在随后的用户搜索中会得到特殊考虑。Google蜘蛛旨在索引页面上的每个重要词汇,省略冠词“a”、“an”和“the”。其他蜘蛛则采用不同的方法。

这些不同的方法通常旨在使蜘蛛运行更快、让用户搜索更高效,或两者兼而有之。例如,一些蜘蛛会跟踪标题、副标题和链接中的词汇,以及页面上100个最常用的词和前20行文本中的每个词。据称Lycos就是用这种方法抓取网页的。

其他系统,例如AltaVista,则走向另一个方向,索引页面上的每一个词,包括“a”、“an”、“the”以及其他“不重要”的词。这种方法对完整性的追求与其他系统对网页未见部分(元标签)的关注相匹配。  在下一页了解更多关于元标签的信息。

元标签

元标签允许页面所有者指定页面将被索引的关键词和概念。这很有帮助,尤其是在页面上的词汇可能具有双重或三重含义的情况下——元标签可以引导搜索引擎选择这些词汇的几种可能含义中哪一个是正确的。然而,过度依赖元标签存在危险,因为粗心或不道德的页面所有者可能会添加与实际页面内容无关但与热门话题相符的元标签。为了防止这种情况,蜘蛛会将元标签与页面内容进行关联,拒绝与页面词汇不匹配的元标签。

所有这些都假设页面所有者确实希望其页面包含在搜索引擎的活动结果中。很多时候,页面所有者不希望其页面出现在主流搜索引擎上,或者不希望蜘蛛访问页面。例如,考虑一个每次显示页面部分或跟踪新链接时都会构建新的活动页面的游戏。如果网络蜘蛛访问其中一个页面,并开始跟踪所有新页面的链接,游戏可能会将这种活动误认为是高速人类玩家并失控。为了避免这种情况,开发了机器人排除协议。该协议在网页开头的元标签部分实现,告诉蜘蛛不要处理该页面——既不要索引页面上的词汇,也不要尝试跟踪其链接。

广告

构建索引

一旦蜘蛛完成在网页上查找信息的任务(我们应该注意到,这项任务实际上从未完成——网络不断变化的特性意味着蜘蛛总是在爬行),搜索引擎必须以使其有用的方式存储信息。使收集到的数据可供用户访问涉及两个关键组件:

  • 与数据一起存储的信息
  • 信息被索引的方法

在最简单的情况下,搜索引擎可以只存储词汇及其找到该词汇的URL。实际上,这将使搜索引擎的使用受限,因为无法判断该词汇在页面上是以重要还是微不足道的方式使用,该词汇是使用了一次还是多次,或者该页面是否包含指向包含该词汇的其他页面的链接。换句话说,将无法构建旨在将最有用页面呈现在搜索结果列表顶部的排名列表。

广告

为了获得更有用的结果,大多数搜索引擎存储的不仅仅是词汇和URL。搜索引擎可能会存储该词汇在页面上出现的次数。搜索引擎可能会为每个条目分配一个权重,当词汇出现在文档顶部、副标题、链接、元标签或页面标题中时,其值会增加。每个商业搜索引擎都有不同的公式来为其索引中的词汇分配权重。这就是在不同搜索引擎上搜索同一个词会产生不同列表,并且页面呈现顺序也不同的原因之一。

无论搜索引擎存储的额外信息组合如何,数据都将经过编码以节省存储空间。例如,最初的Google论文描述使用2字节(每个8)来存储权重信息——包括词汇是否大写、其字体大小、位置以及其他有助于排名命中结果的信息。每个因素可能在2字节分组中占用2或3位(8位=1字节)。因此,大量信息可以以非常紧凑的形式存储。信息压缩后,就可以进行索引了。

索引只有一个目的:它允许尽快找到信息。构建索引的方法有很多种,但最有效的方法之一是构建哈希表。在哈希中,应用一个公式为每个词附加一个数值。该公式旨在将条目均匀分布在预定数量的划分中。这种数值分布不同于词汇在字母表中的分布,这是哈希表有效性的关键。

在英语中,有些字母开头有很多单词,而有些则很少。例如,你会发现字典中“M”开头的词汇部分比“X”开头的词汇部分厚得多。这种不平等意味着查找以非常“热门”字母开头的词汇可能比查找以不太热门字母开头的词汇花费更长时间。哈希法均衡了这种差异,并减少了查找条目的平均时间。它还将索引与实际条目分开。哈希表包含哈希后的数字以及指向实际数据的指针,这些数据可以以最有效的方式进行排序。高效索引和有效存储的结合使得即使在用户创建复杂搜索时也能快速获得结果。

构建搜索

搜索索引涉及用户构建查询并通过搜索引擎提交。查询可以非常简单,至少是一个单词。构建更复杂的查询需要使用布尔运算符,以便您能够细化和扩展搜索词。

最常见的布尔运算符有:

广告

  • AND(与) - 所有通过“AND”连接的词汇都必须出现在页面或文档中。一些搜索引擎用运算符“+”代替单词AND。
  • OR(或) - 至少一个通过“OR”连接的词汇必须出现在页面或文档中。
  • NOT(非) - 紧随“NOT”的词汇不得出现在页面或文档中。一些搜索引擎用运算符“-”代替单词NOT。
  • FOLLOWED BY(紧随) - 其中一个词必须直接紧随另一个词。
  • NEAR(附近) - 其中一个词必须在另一个词的指定字数范围内。
  • 引号 - 引号之间的词汇被视为一个短语,该短语必须在文档或文件中找到。

未来搜索

布尔运算符定义的搜索是字面搜索——搜索引擎会精确查找输入的词汇或短语。当输入的词汇具有多重含义时,这可能会成为一个问题。例如,“Bed”可以是睡觉的地方、种花的地方、卡车的储物空间或鱼产卵的地方。如果你只对其中一种含义感兴趣,你可能不希望看到所有其他含义的页面。你可以构建一个字面搜索来尝试消除不需要的含义,但如果搜索引擎本身能提供帮助,那就更好了。

搜索引擎研究的领域之一是基于概念的搜索。其中一些研究涉及对包含您搜索的词汇或短语的页面进行统计分析,以找到您可能感兴趣的其他页面。显然,对于基于概念的搜索引擎,存储的每页信息更多,并且每次搜索需要更多的处理。尽管如此,许多团队仍在努力改进这种搜索引擎的结果和性能。还有一些人已经转向另一个研究领域,称为自然语言查询

广告

自然语言查询背后的理念是,你可以像问旁边的人一样输入问题——无需记住布尔运算符或复杂的查询结构。目前最受欢迎的自然语言查询网站是AskJeeves.com,它会解析查询以查找关键词,然后将其应用于其已构建的网站索引。它只适用于简单查询;但开发一个能够接受高度复杂查询的自然语言查询引擎的竞争非常激烈。

有关搜索引擎及相关主题的更多信息,请查看下一页的链接。