用户通过搜索引擎看到的是一个列表。包括网页title、摘要、地址链接等信息。如何生成这样一个列表,是搜索引擎服务子系统的主要工作。
服务子系统是在服务过程中涉及的相关软件程序,而网页处理子系统事先为这些软件程序准备了相应的数据。搜索引擎服务子系统在相应一个用户查询时,其工作主要涉及下面四个方面:
查询匹配
对于普通用户来说,用户在检索框中输入“网站优化”,可能是他想了解有关网站优化的概念和相关的知识。目前用一个词或者短语来进行查询,依然是主流的查询模式,这种模式比较简单并且容易实现。
词的识别是搜索引擎中非常关健的一步,通过字典文件对网页内的词进行识别,对于英文等西方语音来说,需要识别词的不同形式,比如单复数、时态、词根、组合词等,对于中文、日文等亚洲语音,需要进行分词处理。识别出网页中的每个词,并分配唯一的wordID号,用于为数据索引中的索引模块服务。
例如,当用户输入“北京网络推广公司”进行搜索时,系统首先将这个短语进行分词处理,讲求分为“北京 网络推广 公司”,然后删除那些没有查询意义或者在每篇文档中都会出现的词,最后形成一个用于参加匹配的查询词表,该词表的数据结构是一个用对应的分词作为索引的倒排文件,它的每一个元素都对应倒排文件中的一个倒排表。这样系统就完成了查询和文档的匹配。
建立索引库
索引库的建立是数据索引中结构最复杂的一部分。一般需要建立两种索引:文档索引和关键词索引。文档索引分配每个网页一个唯一的docID号,根据docID索引出在这个网页中出现过多少个wordID,每个wordID出现的次数、位置、大小写格式等,形成docID对应wordID的数据列表。关键词索引其实是对文档索引的逆索引,根据wordID索引出这个词出现在哪些网页,出现在每个网页的次数、位置、大小写格式等,形成wordID对应docID的列表。
结果排序
按照某种评价方式,也就是排名算法,确定出查询结果集合中元素的顺序,让这些元素以某种顺序呈现出来,这就是相关性。相关性是形成这种查询顺序的基本元素,有效的定义相关性本身是很困难的,从原理上将它不仅和查询词相关,而且还和用户的背景以及用户的查询历史有关。不同需求的用户可能输入同一个查询,同一个用户在不同的时间输入的相同的查询可能是针对于不同的需求的。
结果排序的方法是基于词汇出现的频率,也就是说在一篇文档中包含的查询词越多,则该文档就越应该排在前面。这样一种思路有一定的道理,而且在倒排文件数据结构上很容易实现。当我们通过关键词的提取过程,形成一篇文档的关键词的集合后,很容易同时得到每一个词在该文档中出现的次数、即词频,而倒排文件中每个倒排表的长度则对应着一个词所涉及的文档的篇数,即文档频率。
然而,由于网页编写的随意性较强,仅仅针对词的出现来决定文档的顺序,会有明显缺点,需要其他技术的补充。这方面最重要的成果就是PageRank。通过在网页处理阶段为每篇网页形成一个和网页内容无关的重要性指标,将它和查询过程中形成的相关性指标结合形成一个最终的排序,是目前搜索引擎给出的查询结果排序的主要方法。
摘要
搜索引擎给出的网页列表,每一个网页信息有3个基本元素:标题、网址和摘要。其中的摘要需要从网页正文中生成。
搜索引擎按照某种规则,事先在预处理阶段会从网页中提取出一些文字,如截取网页正文的开头512个字节,或者将每一个段落的第一句拼起来。这样形成的摘要存放在查询子系统中,一旦相关文档被选中与查询项匹配,就读出返回给一年规划。
还有一种“动态摘要”,即在响应查询的时候,根据查询词在文档中的位置,提取出周围的文字来,在显示时将查询词标亮。这是目前大多数搜索引擎采用的方式。