欢迎光临

木子屋

标题: 搜索引擎的工作机制

作者: dnawo

日期: 2007-01-21 12:44 AM

分类: 网络技术

内容: 搜索引擎是一种依靠技术取胜的产品，搜索引擎的各个组成部分，包括页面搜集器、索引器、检索器等，都是搜索引擎产品提供商进行比拼的着力点。
近几年，搜索引擎的商业化取得了巨大的成功，如著名搜索引擎公司Google、Yahoo（本文中提到Yahoo时，特指英文Yahoo）、百度等纷纷成功上市，引发了众多公司涉足于该领域，带动了人力、资本的大量投入，连软件巨人Microsoft公司也禁不住诱惑积极打造自己的搜索引擎。但是，从性能上来说，目前的搜索引擎还不尽如人意，搜索返回的结果往往与用户的检索要求相去甚远，有效性还不是很高。本文将对搜索引擎的工作原理及其实现技术进行分析，从中可以了解限制搜索引擎用户体验改善的因素到底有哪些。
搜索引擎的工作过程
大型互联网搜索引擎的数据中心一般运行数千台甚至数十万台计算机，而且每天向计算机集群里添加数十台机器，以保持与网络发展的同步。搜集机器自动搜集网页信息，平均速度每秒数十个网页，检索机器则提供容错的可缩放的体系架构以应对每天数千万甚至数亿的用户查询请求。企业搜索引擎可根据不同的应用规模，从单台计算机到计算机集群都可以进行部署。
搜索引擎一般的工作过程是: 首先对互联网上的网页进行搜集，然后对搜集来的网页进行预处理，建立网页索引库，实时响应用户的查询请求，并对查找到的结果按某种规则进行排序后返回给用户。搜索引擎的重要功能是能够对互联网上的文本信息提供全文检索。
图1 搜索引擎的工作流程
搜索引擎通过客户端程序接收来自用户的检索请求，现在最常见的客户端程序就是浏览器，实际上它也可以是一个用户开发的简单得多的网络应用程序。用户输入的检索请求一般是关键词或者是用逻辑符号连接的多个关键词，搜索服务器根据系统关键词字典，把搜索关键词转化为wordID，然后在标引库（倒排文件）中得到docID列表，对docID列表中的对象进行扫描并与wordID进行匹配，提取满足条件的网页，然后计算网页和关键词的相关度，并根据相关度的数值将前K篇结果(不同的搜索引擎每页的搜索结果数不同)返回给用户，其处理流程如图1所示。
图2描述了一般搜索引擎的系统架构，其中包括页面搜集器、索引器、检索器、索引文件等部分，下面对其中的主要部分的功能实现进行了介绍。
图2 搜索引擎各个组成部分的关系
搜集器
搜集器的功能是在互联网中漫游，发现并搜集信息，它搜集的信息类型多种多样，包括HTML页面、XML文档、Newsgroup文章、FTP文件、字处理文档、多媒体信息等。搜索器是一个计算机程序，其实现常常采用分布式和并行处理技术，以提高信息发现和更新的效率。商业搜索引擎的搜集器每天可以搜集几百万甚至更多的网页。搜索器一般要不停地运行，要尽可能多、尽可能快地搜集互联网上的各种类型的新信息。因为互联网上的信息更新很快，所以还要定期更新已经搜集过的旧信息，以避免死链接和无效链接。另外，因为Web信息是动态变化的，因此搜集器、分析器和索引器要定期更新数据库，更新周期通常约为几周甚至几个月。索引数据库越大，更新也越困难。
互联网上的信息太多，即使功能强大的搜集器也不可能搜集互联网上的全部信息。因此，搜集器采用一定的搜索策略对互联网进行遍历并下载文档，例如，一般采用以宽度优先搜索策略为主、线性搜索策略为辅的搜索策略。
在搜集器实现时，系统中维护一个超链队列，或者堆栈，其中包含一些起始URL，搜集器从这些URL出发，下载相应的页面，并从中抽取出新的超链加入到队列或者堆栈中，上述过程不断重复队列直到堆栈为空。为提高效率，搜索引擎将Web空间按照域名、IP地址或国家域名进行划分，使用多个搜集器并行工作，让每个搜索器负责一个子空间的搜索。为了便于将来扩展服务，搜集器应能改变搜索范围。
1.线性搜集策略
线形搜索策略的基本思想是从一个起始的IP地址出发，按IP地址递增的方式搜索后续的每一个IP地址中的信息，完全不考虑各站点的HTML文件中指向其他Web站点的超链地址。此策略不适用于大规模的搜索（主要原因在于IP可能是动态的），但可以用于小范围的全面搜索，利用此种策略的搜集器可以发现被引用较少或者还没有被其他HTML文件引用的新HTML文件信息源。
2. 深度优先搜集策略
深度优先搜集策略是早期开发搜集器使用较多的一种方法，它的目的是要达到被搜索结构的叶结点。深度优先搜索顺着HTML文件上的超链走到不能再深入为止，然后返回到上一个接点的HTML文件，再继续选择该HTML文件中的其他超链。当不再有其他超链可选择时，说明搜索已经结束。深度优先搜索适宜遍历一个指定的站点或者深层嵌套的HTML文件集，但对于大规模的搜索，由于Web结构相当深，也许永远也出不来了。
3. 宽度优先搜集策略
宽度优先搜集策略是先搜索同一层中的内容，然后再继续搜索下一层。假如一个HTML文件中有三个超链，选择其中之一并处理相应的HTML文件，然后返回并选择刚才第一个网页的第二个超链，处理相应的HTML文件，再返回。一旦同一层上的所有超链都已被处理过，就可以开始在刚才处理过的HTML文件中搜索其余的超链。这样保证了对浅层的首先处理，当遇到一个无穷尽的深层分支时，也就不会再陷进去。宽度优先搜集策略容易实现并被广泛采用，但是需要花费比较长的时间才能到达深层的HTML文件。
4. 收录搜集策略
有些网页可以通过用户提交的方式进行搜集，例如某些商业网站向搜索引擎发出收录申请，搜集器就可以定向搜集提交申请网站的网页信息并加入到搜索引擎的索引数据库中。
分析器
对搜集器搜集来的网页信息或者下载的文档一般要首先进行分析，以用于建立索引，文档分析技术一般包括: 分词（有些仅从文档某些部分抽词，如Altavista）、过滤（使用停用词表stoplist）、转换（有些对词条进行单复数转换、词缀去除、同义词转换等工作），这些技术往往与具体的语言以及系统的索引模型密切相关。
索引器
索引器的功能是对搜索器所搜索的信息进行分析处理，从中抽取出索引项，用于表示文档以及生成文档库的索引表。索引项有元数据索引项和内容索引项两种: 元数据索引项与文档的语意内容无关，如作者名、URL、更新时间、编码、长度、链接流行度等等; 内容索引项是用来反映文档内容的，如关键词及其权重、短语、单字等等。内容索引项可以分为单索引项和多索引项（或称短语索引项）两种。单索引项对于英文来讲是英语单词，比较容易提取，因为单词之间有天然的分隔符（空格）; 对于中文等连续书写的语言，必须进行词语的切分。在搜索引擎中，一般要给单索引项赋予一个权值，以表示该索引项对文档的区分度，同时用来计算查询结果的相关度。使用的方法一般有统计法、信息论法和概率法。短语索引项的提取方法有统计法、概率法和语言学法。
为了快速查找到特定的信息，建立索引数据库是一个常用的方法，即将文档表示为一种便于检索的方式并存储在索引数据库中。索引数据库的格式是一种依赖于索引机制和算法的特殊数据存储格式。索引的质量是Web信息检索系统成功的关键因素之一。一个好的索引模型应该易于实现和维护、检索速度快、空间需求低。搜索引擎普遍借鉴了传统信息检索中的索引模型，包括倒排文档、矢量空间模型、概率模型等。例如在矢量空间索引模型中，每个文档d都表示为一个范化矢量V(d)=(t1,w1 (d)…ti,w1(d)…tn,wn(d))。其中ti为词条项，wi(d)为ti在d中的权值，一般被定义为ti在d中出现频率tfi(d)的函数。
索引器的输出是索引表，它一般使用倒排形式（Inversion List），即由索引项查找相应的文档。索引表也可能记录索引项在文档中出现的位置，以便检索器计算索引项之间的相邻或接近关系（proximity）。索引器可以使用集中式索引算法或分布式索引算法。当数据量很大时，必须实现实时索引（Instant Indexing），否则就无法跟上信息量急剧增加的速度。索引算法对索引器的性能（如大规模峰值查询时的响应速度）有很大的影响。一个搜索引擎的有效性在很大程度上取决于索引的质量。
检索器
检索器的功能是根据用户的查询在索引库中快速检出文档，进行文档与查询的相关度评价，对将要输出的结果进行排序，并实现某种用户相关性反馈机制。检索器常用的信息检索模型有集合理论模型、代数模型、概率模型和混合模型等多种，可以查询到文本信息中的任意字词，无论出现在标题还是正文中。
检索器从索引中找出与用户查询请求相关的文档，采用与分析索引文档相识的方法来处理用户查询请求。如在矢量空间索引模型中，用户查询q首先被表示为一个范化矢量V(q)=(t1,w1(q); …; ti,wi(q); …; tn,wn(q))，然后按照某种方法来计算用户查询与索引数据库中每个文档之间的相关度，而相关度可以表示为查询矢量V(q)与文档矢量V(d)之间的夹角余弦，最后将相关度大于阀值的所有文档按照相关度递减的顺序排列并返还给用户。当然搜索引擎的相关度判断并不一定与用户的需求完全吻合。
用户接口
用户接口的作用是为用户提供可视化的查询输入和结果输出界面，方便用户输入查询条件、显示查询结果、提供用户相关性反馈机制等，其主要目的是方便用户使用搜索引擎，高效率、多方式地从搜索引擎中得到有效的信息。用户接口的设计和实现必须基于人机交互的理论和方法，以适应人类的思维和使用习惯。
在查询界面中，用户按照搜索引擎的查询语法制定待检索词条及各种简单或高级检索条件。简单接口只提供用户输入查询串的文本框，复杂接口可以让用户对查询条件进行限制，如逻辑运算（与、或、非）、相近关系（相邻、NEAR）、域名范围（如edu、com）、出现位置（如标题、内容）、时间信息、长度信息等等。目前一些公司和机构正在考虑制定查询选项的标准。
在查询输出界面中，搜索引擎将检索结果展现为一个线性的文档列表，其中包含了文档的标题、摘要、快照和超链等信息。由于检索结果中相关文档和不相关文档相互混杂，用户需要逐个浏览以找出所需文档。
搜索引擎的中文分词技术
中文自动分词是网页分析的基础。在网页分析的过程中，中文与英文的处理方式是不同的，这是因为中文信息与英文信息有一个明显的差别: 英文单词之间有空格，而中文文本中词与词之间没有分割符。这就要求在对中文网页进行分析之前，先要将网页中的句子切割成一个个的词的序列，这就是中文分词。中文自动分词涉及到许多自然语言处理技术和评价标准，在搜索引擎中，我们主要关心中文自动分词的速度和准确度。分词准确性对搜索引擎来说十分重要，但如果分词速度太慢，即使准确性再高，对于搜索引擎来说也是不可用的，因为搜索引擎需要处理数以亿计的网页，如果分词耗用的时间过长，会严重影响搜索引擎内容更新的速度。因此，搜索引擎对分词的准确性和速度都提出了很高的要求。
目前，中文自动分词比较成熟的技术是基于分词词典的机械分词方法。这种方法是按照一定的策略将要分析的汉字串与词典中的词条进行匹配。根据匹配策略的不同，机械分词方法又有如下几种算法: 正向最大匹配算法、逆向最大匹配算法、最少分词算法等。这种方法的优点是分词的速度快，准确度有一定的保证，但对未登录词的处理效果较差。实验结果表明: 正向最大匹配的错误率为1/169左右，逆向最大匹配的错误率为1/245左右。另一种比较常用的中文自动分词方法是基于统计的分词方法，这种方法是对语料中的字组频度进行统计，不需要切分词典，因此也称为无词典分词方法。但该方法经常把不是词的常用字组当成词，对常用词的识别精度较差，时空开销也比较大。在搜索引擎领域的实际应用中，一般将机械分词方法与统计分词方法相结合，先进行串匹配分词，然后使用统计方法识别一些未登录的新词，这样既发挥了匹配分词速度快、效率高的优势，又利用了统计分词中新词自动识别和自动消除分词歧义的特点。
分词词典是影响中文自动分词的一个重要因素，其规模一般在6万条词左右，词典太大或太小都是不合适的; 辞典太小，有些词切分不出来，辞典太大，切分过程中起义现象将大大增加，同样影响分词的精度。因此，分词词典中词条的选择是非常严格的。对于不断出现新词的网络领域，仅仅使用6万条词左右的分词词典是不够的，但随意向分词词典中加入新词将导致分词精度下降，一般的解决方法是使用辅助词典，其规模在50万词条左右。另外，中文自动分词的难点在于分词歧义的处理和未登录词的识别，如何处理这两个问题一直是该领域研究的热点。
1. 歧义处理
歧义是指可能有两种或者更多的切分方法。例如: “表面的”这个词组，因为“表面”和“面的”都是词，那么这个短语就可以分成“表面+的”和“表+面的”。这种称为交叉歧义。像这种交叉歧义十分常见，“化妆和服装”可以分成“化妆+和+服装”或者“化妆+和服+装”。由于没有人的知识去理解，计算机很难知道到底哪个方案正确。
交叉歧义相对组合歧义来说是还算比较容易处理，组合歧义就必须根据整个句子来判断了。
例如，在句子“这个门把手坏了”中，“把手”是个词，但在句子“请把手拿开”中，“把手”就不是一个词; 在句子“将军任命了一名中将”中，“中将”是个词，但在句子“产量三年中将增长两倍”中，“中将”就不再是词。这些词计算机又如何去识别?
即使交叉歧义和组合歧义计算机都能解决的话，在歧义中还有一个难题，是真歧义。真歧义意思是给出一句话，由人去判断也不知道哪个应该是词、哪个应该不是词。例如: “乒乓球拍卖完了”，可以切分成“乒乓+球拍+卖+完+了”、也可切分成“乒乓球+拍卖+完+了”，如果没有上下文其他的句子，恐怕谁也不知道“拍卖”在这里算不算一个词。
对歧义现象的处理方法一般采用类似于动态规划的算法将歧义问题的求解转化为一个优化问题的求解。在求解过程中，一般使用词频或概率等辅助信息求得一个最大可能的分词结果，这个结果在某种意义下是最佳的。
2. 未登录词处理
未登录词就是分词词典中没有的词，也称为新词。最典型的是人名、地名、专业术语等。例如，人可以很容易理解句子“王军虎去广州了”中，“王军虎”是个词，因为是一个人的名字，但要是让计算机去识别就困难了。如果把“王军虎”作为一个词收录到字典中去，全世界有那么多名字，而且每时每刻都有新增的人名，收录这些人名本身就是一项巨大的工程。即使这项工作可以完成，还是会存在问题，例如: 在句子“王军虎头虎脑”中的，“王军虎”还能不能算词？
未登录词中除了人名以外，还有机构名、地名、产品名、商标名、简称、省略语等都是很难处理的问题，而且这些又正好是人们经常使用的词，因此对于搜索引擎来说，分词系统中的新词识别十分重要。目前，对未登录词的处理一般采用统计的方法，首先从语料中统计出出现频率较高的字组，然后按照某种规则把它们作为新词添加到辅助词典中。
目前，中文自动分词技术在搜索引擎中已经得到广泛应用，分词准确度已经达到96%以上，但是在对大规模网页进行分析处理的时候，现有的中文自动分词技术还存在许多不足，例如上面提到的歧义问题和未登录词的处理问题等。因此，国内外的科研院校，如北大、清华、中科院、北京语言学院、东北大学、IBM研究院、微软中国研究院等都一直关注并研究中文自动分词技术，这主要是因为网络上的中文信息越来越多，对网络上的中文信息的处理必将成为一个巨大的产业和广阔的市场，存在无限的商机。但是，中文自动分词技术要想更好地服务于网络中文信息的处理并形成产品，还要在基础研究方面和系统的集成方面做许多工作。
搜索引擎面临的挑战
目前的搜索引擎不可能做到“博大精深”，这是因为它们是矛盾的两个方面，不可兼得。随着互联网信息的急剧增长，关于搜索引擎的“博大”越来越难实现，从利用信息的角度也完全没有必要，“精深”反而是人们越来越重视并追求的指标。另外，多层次的搜索服务体系远远没有建立起来，传统搜索重导航作用、轻精准信息服务，就像行人问路，行人需要的不仅仅是方向，还要知道具体的路标指示。
现在人们经常谈论下一代搜索引擎，那么，下一代搜索引擎与第二代搜索引擎有什么不同？又有什么关系？它应该包括哪些功能？这些都是应该回答的问题，但答案是众说纷纭。也许下一代搜索引擎融入了更强劲的智能化、人机交互等方法来改善相关度的计算，也许下一代搜索引擎不仅仅运行在大规模服务器上，更有可能的是运行在共享计算资源的个人电脑集群上，或者植入“搜索芯片”中，也许其索引库的边界已经模糊、也许更加清晰，也许当下搜索巨头通过资金、品牌等人为地不断树立的商业壁垒，终究抵挡不住创新搜索技术的颠覆，正如当初Google将Altavista无声地瓦解一样。
————————————————————————————————————————————————
[相关链接]
搜索引擎的技术流派
搜索引擎的技术流派可以分为三类：第一类是利用计算机程序自动进行信息处理的自动化派，其典型代表是Google以及Ghunt等；第二类是以人工进行信息分类处理为主的人力加工派，这方面的典型代表是早期的Yahoo，正在兴起的Web 2.0、网摘等社区化搜索是这一流派的新发展；第三类是强调智能化人机交互、协同的融合派，目前英文Yahoo的搜索引擎在发展这方面的技术，MSN Live也显示出其更加重视融合性的技术，联索IFACE专业搜索融入了用户知识和机器学习方法，可以看做是融合派在中文搜索引擎方面的典型代表。
如果按照网页库的容量、相关度计算技术、用户搜索体验以及商业模式等方面来划分，到目前为止，搜索引擎的发展大约经历了两代。第一代搜索引擎(1994年～1997年)的索引网页量一般都在数百万量级左右，采用全文检索技术和分布式并行运算技术，但极少重新搜集网页并去刷新索引，而且其检索速度较慢，一般都要等待10秒甚至更长的时间，同时承受的检索请求也受到很大限制，商业模式处于探索期并且尚未成型。
第二代搜索引擎(1998年至今)大多采用分布式协同处理方案，其网页索引库一般都在数千万个网页量级甚至更多，采用可伸缩的索引库架构，每天能够响应数千万次甚至数以亿计的用户检索请求。1997年11月，当时最先进的几个搜索引擎宣称能建立1亿数量级的网页索引。以Google为代表的第二代搜索引擎通过链接分析和点击分析（网页流行度）方法来计算（网页权威性）相关度取得了巨大的成功。另外，以自然语言进行问题解答的搜索引擎在某种程度上改善了用户体验，更重要的是第二代搜索引擎奠定了目前搜索引擎普遍采用的成熟商业模式，如Google、Overture、百度等收费搜索服务均受益于此商业模式。
相关名词解释
全文搜索引擎　是由一个称为蜘蛛(Spider)的机器人程序以某种策略自动地在互联网中搜集和发现信息，由索引器为搜集到的信息建立网页索引数据库，由检索器根据用户输入的查询条件检索索引库，并将查询结果返回给用户。服务方式是面向网页的全文检索服务。
目录索引搜索引擎　主要以人工方式搜集信息，由编辑人员查看信息之后，人工形成信息摘要，并将信息置于事先确定的分类框架中。信息大多面向网站，提供目录浏览服务和直接检索服务。用户完全可以不用关键词（Keywords）进行查询，仅靠分类目录也可找到需要的信息。
元搜索引擎　是指在统一的用户查询界面与信息反馈的形式下，共享多个搜索引擎的资源库为用户提供信息服务的系统。元搜索引擎是借助于其他搜索引擎进行工作，没有自己的索引库，它是将用户的查询请求同时向多个搜索引擎递交，将返回的结果进行重复排除、重新排序等处理后，作为自己的结果返回给用户。
自动分类技术　是计算机根据分类标准自动将文档归类到已经存在的类别体系（或者主题）下的某一个具体类别中。目前自动分类并不能完全代替人工所做的相关工作，只是提供了一个花费较少的可选择方法。
文本聚类技术　是利用计算机将已经存在的大量文本（很多文档）进行分组的全自动处理过程。聚类可以提供对一个大的文本集内容的概况了解，可以识别隐藏的共同点，可以便捷地浏览相近或相关的文本。
网文摘录　又称网摘，它具有对内容页的收藏、分类、摘录、加注标签、保存到信息库、信息库共享等功能，主要是为了满足用户阅读网络内容和信息知识积累的需要。

+ 查看当前日志评论 (2)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.672 ms

返回

标题: 搜索引擎的工作机制

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.672 ms

返回

标题: 搜索引擎的工作机制

评论内容:

== xrou 2007-01-21 11:00 PM ----

哥哥，你好，我最近也用PJblog做了个自己的博客，看了你的博客后，有个技术上的问题想请教您。不知怎么联系你。要不你加我QQ吧。爱你的我，QQ：348641908

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.176 ms

返回