互联网搜索引擎是万维网中的特殊
站点,专门用来帮助人们查找
存储在其他站点上的信息。搜索引擎有能力寻找到文件或文档存储在何处。
互联网
好消息是,网上有无数
网页提供主题极为多样的信息。坏消息是,这些网页大都是由制作者随便命名的,而且几乎全都存储在不知何名的
服务器上。当需要了解特定主题时,怎么知道应当阅读哪些网页呢?这时就要使用互联网
搜索引擎。
任务
尽管各种搜索引擎的工作方式有所不同,但它们都要完成两个基本任务:
关键字
基于关键字来搜索互联网——或其中的一部分。 生成一份索引,保存所搜寻的词语,以及相应地址。 允许用户在索引中查找词语或词语组合。 早期搜索引擎的索引仅包括数十万个的
网页或文档,每天受理的查询可能只有一两千次。如今,顶级搜索引擎的索引列表涵盖数亿个网页,每天响应数千万次查询。本文将讲解这些基本任务是如何完成,以及互联网搜索引擎是如何整合信息便于找到所需内容。
搜索引擎
大多数人谈及互联网搜索引擎时,实际上指的是
万维网搜索引擎。在万维网成为互联网最引人注目的部分之前,早就有搜索引擎帮助人们查找网上信息了。如“
gopher”和“Archie”等程序可以生成索引,存储在接入互联网的各个
服务器上的文件信息,极大缩短了查找程序和文档的时间。上世纪八十年代末,要想从互联网上获得有价值的信息,就必须知道如何使用 gopher、Archie、Veronica以及其它类似程序。
大多数互联网用户只限于搜索万维网,所以本文只讨论面向
网页内容的
搜索引擎。
工作原理
步骤原理
搜索引擎在有能力告诉你文件或文档存储在何处之前,必须先找到它们。为了在现有的数亿
网页中找到信息,搜索引擎使用了一种特殊的
软件机器人,称之为
蜘蛛程序,以此生成在网站上查询到的词语列表。蜘蛛程序建立词语列表的过程被称为
爬网。(将互联网的一部分称为网络有些缺点——大量工具以蜘蛛命名就是其一。)为了建立并维护一份有用的词语列表,搜索引擎的蜘蛛程序需要游历大量网页。
爬寻方式
通常起点是那些
访问量很大的
服务器和热门
网页。
蜘蛛程序从一个很受欢迎的网站开始,检索网页上的词语并追踪在该网站上找到的每个链接。这样,蜘蛛程序迅速开始了旅行,爬遍网上绝大多数经常访问的网站。
谷歌实例
谷歌起始
Google的前身是一个
学术搜索引擎。在介绍该系统开发过程的论文中,
google创始人
塞吉·布林(Sergey Brin)和劳伦斯·佩奇(Lawrence Page)举例说明了他们的
蜘蛛程序工作得有多快。他们最初开发的系统使用多个蜘蛛程序——通常是三个。每个蜘蛛程序可以同时打开300个链接。最多可以同时使用四个蜘蛛程序,此时该系统每秒可以游历100多个
网页,生成大约600KB的数据。
运行原理
要保证一切都快速运行,意味着必须开发一套系统来为
蜘蛛程序提供必要信息。早期
Google系统有一个专门为蜘蛛程序提供链接信息的
服务器。为了尽可能减少延时,Google没有依靠
互联网服务提供商提供的
域名服务器(DNS)来将服务器名翻译为
网址,而是准备了自己的域名服务器。
访问记录
当
Google的
蜘蛛程序访问一个HTML
网页时,它会记录以下两种信息:
网页中的词语 词语所在位置 出现在标题、副标题、元标记以及其他相对重要的位置的词语,会被记录下来,这些词语往往是日后用户搜索时经常使用的。Google蜘蛛程序的设计旨在检索网页中的每一个重要单词(对于英文来说,还要滤掉冠词a、an和the等)。其他蜘蛛程序采用不同的方法。
这些方法通常是为了尽量加快蜘蛛程序的速度,或使用户可以更有效地进行搜索,或二者兼而有之。例如,有些蜘蛛程序会追踪标题、副标题和链接中的词语,以及网页中最常用的100个词和文章前20行中的每一个词。据说
Lycos就是使用这种方法
爬网的。
其他实例
如比
AltaVista,则反其道而行之,检索
网页中的每一个字,包括a、an、the以及其他“不重要”的词。人们完善这种方法的干劲从未减弱,而另一些系统则通过其它方法与之抗衡。比如关注网页的不可见部分,即元标记。
元标记
定义
元标记允许
网页所有者来设定检索网页的关键字或概念。这很有用,特别是在网页中的词语有多个含义的时候——元标记可以引导搜索引擎在这些词的几种可能含义中选择正确的一项。
引起问题
过分依赖元标记有一个危险:粗心或不负责任的
网页所有者会添加一些对应热门话题的元标记,但是与网页实际内容没有任何关系。为了防止此种事情发生,
蜘蛛程序会比对元标记和网页内容,剔除那些与网页词语不符的元标记。
上述方法均基于一个假设,也就是网页所有者希望自己的网页被纳入搜索引擎的
搜索列表。但有些情况下,网页所有者并不希望它们出现在主流搜索引擎中,或是不希望蜘蛛程序访问网页。比如,假设有一款网页游戏,每当部分页面被显示或者新链接被点击时,游戏就会生成新的
动态页面。如果
网络蜘蛛程序进入网页,继而开始追踪所有新网页的链接,游戏很可能将这些操作错认为是由一名操作速度极快的玩家执行的,从而失去控制。为了避免此类情况,人们制定了一套
拒绝蜘蛛协议。该协议如果嵌入
网页开头的元标记部分,就会告诉
蜘蛛程序远离该页面——既不要检索网页上的词语,也不要试图追踪网页上的链接。
搜集方法
一旦
蜘蛛程序完成了
网页信息收集工作(我们应当注意,这是一项永远不可能真正完成的工作——网页不断更新的特性意味着蜘蛛程序需要不断
爬网),搜索引擎就必须以一种有效方式存储这些信息。要让收集到的数据可供用户使用,涉及两个关键环节:
索引方法
在最简单的情况下,搜索引擎只需存储词语和词语所在地址。实际上,这样做会限制搜索引擎的用途,因为这种方式无法区别词语在
网页中是被重点使用,还是略一提及,也无法区别词语是使用一次还是多次,或该网页上是否含有其它包括该
关键字的网页的链接。换句话说,这样做将无法建立排名表,无法把最有用的网页放在查询结果列表的顶端。
为了获得更多有用信息,大多数搜索引擎存储的信息不仅仅是词语和
网址,还可能存储着该字在网页中出现的次数。搜索引擎可能会为每个词条指定一个权重,按照词语出现在文档开头、网页副标题、链接、元标记或标题的顺序,权重依次增大。各商业搜索引擎指定索引中词语权重的公式有所不同。这从一个侧面解释了为什么使用不同搜索引擎来搜索相同关键字,却会产生不同的搜索结果列表,
网页排列顺序也有所不同。
信息组合
如果忽略搜索引擎存储的额外信息的准确组合,将这些数据进行编码可以节省存储空间。比如,最初的
Google论文描述了使用两个
字节(每个字节8
比特)来存储权重信息——单词是不是大写、字号大小、位置以及其他用来为数据确定级别的信息。每个因素大概占据两字节中的两三个比特(8比特=1字节)。因此,大量信息便能以一种
压缩率极高的方式存储下来。信息被压缩之后,就可以建立索引了。
建立索引
索引的唯一目的是尽快找到信息。有好几种方法可以建立索引,但是最有效的方法是建立散列表。通过
散列法,运用公式给每个词赋予一个数值。该公式可以把词条平均分配给预定数目的分区。此种数值分配不同于根据字母表分配,这是散列表的有效性的关键所在。
在英语中,以某些字母开头的单词较多,而以其他字母开头的单词较少。例如,您会发现,字典的M部就比X部厚得多。这种不均衡意味着查找一个以“常见”字母开头的单词,要比查找不常见字母开头的单词花费更多时间。散列法平衡了这种区别,并且缩短了查找某一词条的平均时间。它还将索引和实际词条分开。散列表中含有经过
散列函数转换生成的数字和一个指向实际数据的指针,(这样)不论什么方式,只要它让实际数据最有效地存储起来,实际数据都可以用这种方式得到分类排序。通过高效的索引和有效的存储方式,即使用户进行了一次复杂的查询,也能迅速查找到结果。
通过索引进行搜索需要用户进行一次查询,并通过搜索引擎提交。查询可以相当简单,最少仅需一个词。建立比较复杂的查询则需要使用
布尔运算符来细化和拓展搜索项。
布尔运算
AND
AND(与)——以“AND”相连的若干搜索项必须全部出现在
网页或文档中。有些搜索引擎使用运算符号“+”来代替“AND”。OR(或)——以“OR”相连的搜索项必须至少有一项出现在网页或文档中。
NOT
NOT(非)——“NOT”之后的搜索项不能出现在
网页或文档中。有些搜索引擎使用运算符号“-”来代替“NOT”。FOLLOWED BY(跟随)——某一搜索项必须紧随另一搜索项。NEAR(临近)——某一搜索项和另一搜索项的距离必须小于特定词数。
引号——引号内的词语应被看作一个完整短语,出现在网页或文档中。
引擎组成
搜索引擎一般由搜索器、索引器、检索器和
用户接口四个部分组成:
搜索器
其功能是在互联网中漫游,发现和搜集信息;
索引器
其功能是理解搜索器所搜索到的信息,从中抽取出索引项,用于表示文档以及生成文档库的索引表;
检索器
其功能是根据用户的查询在
索引库中快速检索文档,进行
相关度评价,对将要输出的结果排序,并能按用户的查询需求合理反馈信息;
用户接口
其作用是接纳用户查询、显示查询结果、提供个性化查询项。
robots
robots协议(也称为爬虫协议、爬虫规则、机器人协议等)也就是
robots.txt,网站通过
robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。
Robots协议是网站国际互联网界通行的道德规范,其目的是保护网站数据和敏感信息、确保用户个人信息和隐私不被侵犯。因其不是命令,故需要搜索引擎自觉遵守。一些病毒如
malware(马威尔病毒)经常通过忽略robots协议的方式,获取网站后台数据和个人信息。
发展趋势
自然搜索
人们的日常交流是使用自然语言而非关键(字)词,因为关键(字)词表达的意思和意图不完整不准确,反映在搜索结果上的缺陷是返回信息过多。基于
自然语言搜索,符合人们的语言习惯,像人与人之间的交流一样轻松、直接、方便,这无疑给用户提供了巨大的便利。
智能搜索
基于关键词搜索是符号匹配信息,并不能处理关键词本身的语义,这就是基于关键词搜索存在一系列缺陷的原因。从这个层面上讲,
搜索引擎的发展趋势是,把“语言计算技术和人工智能融合,让计算机返回的结果富有针对性,将准确信息显示在前两三项的搜索结果之中。让计算机具有人的智能和逻辑分析能力,能够理解自然语言表达的语义,使搜索结果与用户需求实现更精准的匹配,以解决问题的形式把结果返回给用户。