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