以蜘蛛程序为基础的全文搜索引擎的工作原理(搜索引擎的概念及其工作原理)

   360SEO    

搜索引擎的工作过程大体上可以分成三个阶段:

(1)爬行和抓取:搜索引擎蜘蛛通过跟踪链接访问网页,活动页面HTML代码存入数据库。

(2)预处理:索引程序对抓取来的页面数据进行文章提取、中文分词、索引等处理,以备排名程序调用。

(3)排名:用户输入关键词后,排名程序调用索引数据库,计算相关性,然后按一定格式生成搜索结果页面。

一.爬行和抓取

1、蜘蛛

搜索引擎用来爬行页面和访问页面的程序叫做“蜘蛛”,也称为机器人(robots)。

搜索引擎蜘蛛访问网站页面时类似于普通用户使用的浏览器,蜘蛛程序发出页面访问请求后,服务器返回HTML代码,蜘蛛程序把收到的代码存入原始页面数据库中。搜索引擎为了提高爬行和抓取速度,都使用多个蜘蛛并分布爬行。

蜘蛛访问任何一个网站时,都会先访问网站根目录下的robots.txt文件。如果robots.txt文件禁止搜索引擎抓取某些文件或目录,搜索引擎就不会爬行抓取,直接过滤这些文件。

2、跟踪链接

为了抓取网上尽量多的页面,搜索引擎蜘蛛会跟踪页面的链接,从一个页面爬行到另外一个页面,一层层的爬行直至没有继续往下的链接为主。

搜索引擎爬行的原理有两种:一种是深度优化,另外一种就是广度优先。

所谓深度优先,指的就是蜘蛛沿着发现的链接一直向前爬行,直到前面再也没有其他链接指向,然后返回到第一个页面,继续爬行。

广度优先是指蜘蛛在一个页面上发现多个链接地址,不是顺着一个链接一直往前,而是把页面上所有第一层的链接都爬行一遍后,在从第二层页面开始爬行直至最后。从理论上说,无论是深度优先还是广度优先,只要给蜘蛛足够长的时间,都能爬完整个互联网。在实际工作中,蜘蛛的带宽资源、时间都是有限的,也不可能爬行完所有的页面。所以深度优先和广度优先通常是混合使用的,这样既可以照顾到尽量多的页面,也能够照顾到一部分内页。

3、吸引蜘蛛

如何吸引蜘蛛爬行,去抓取更多的页面,我认为应该从以下几个方面去考虑:

(1) 网站和页面的权重:质量高、资格老的网站被认为权重比较高,这种网站的页面被爬行的深度也会比较高,被收录的内页也会增加。

(2) 页面更新度:蜘蛛每次爬行都会把页面数据存储起来,如果第二次爬行发现页面与第一次收录完全一样,说明这个网站页面没有更新,蜘蛛下次过来继续爬行的概率也不会很高。

(3) 导入链接:导入链接也就是咱们经常说的外链和内链,外链顾名思义是从外部网站导入过来的,比较多的就是友情链接。内链主要是针对网站内部来说,是指从网站的一个页面指向另外一个页面。高质量的外链可以增加网站的权重,也可以增加搜索引擎爬行网站的深度。

(4)与首页的点击距离:一般来说网站上权重最高的页面就是首页,大部分外部链接也都是指向首页,蜘蛛访问最频繁的也是首页。所以,离首页距离越近,页面的权重越高,被蜘蛛爬行的几率也会更大。

4、地址库

为了避免重复爬行和抓取网址,搜索引擎内部会建立一个地址库,记录已经被发现还没有抓取的页面,以及已经被抓取的页面。  地址库中的URL有几个来源:

(1)人工录入的种子网站

(2)蜘蛛爬行抓取页面后,从HTML中解析出新的URL,与地址库中的数据库进行对比,如果是地址库中没有的网址,就会存入待访问的地址库。

(3)站长通过搜索引擎网站页面表格提交进来的网址。

5、文件存储

搜索引擎蜘蛛抓取的数据存入原始页面数据库,其中的页面数据与用户浏览器得到的HTML是完全一样,每一个URL都有相应的文件编号。

6、爬行时的复制内容检测

百度会定期对重复收录的页面进行检测,一般在每个月都会有一次大的更新,目的是尽可能删除那些重复收录的页面,对用户提供更多精准的信息,满足用户的搜索目的。

二、预处理

“预处理”也被简称为“索引”,因为索引是预处理最主要的步骤。

(1)提取文字现在的搜索引擎还是以文字内容为基础。蜘蛛抓取到的页面中的HTML格式标签、JavaScript程序等无法用于排名的内容。搜索引擎预处理首先要做的就是从HTML文件中去除标签、程序,提取出可以用于排名处理的网页文字内容。

除了可见文字,搜索引擎也会提取出一些特殊的包含文字信息的代码,如Meta标签中的文字、图片替换文字、Flash文件的替代文字、链接锚文本等。

(2)中文分词

分词是中文搜索引擎特有的步骤。搜索引擎存储和处理页面及用户搜索都是以分词为基础的。

中文分词方法基本上有两种,一种是基于词典匹配,另一种是基于统计。

基于词典匹配的方法是指,将待分析的一段汉字与一个事先造好的词典中的词条进行匹配,在待分析汉字串中扫描到词典中已有的词条则匹配成功,或者说切分出一个单词。

基于统计的分词方法指的是分析大量文字样本,计算出字与字相邻出现的统计概率,几个字相邻出现越多,就越可能形成一个单词。

上述两种方法各有优劣,实际使用中的分词系统都是混合使用两种方法的,快速高效,又能识别生词、新词。

(3)去停止词无论英文中文,页面内容中都会有一些出现频率很高,却对内容没有任何影响的词,如“的”“地”“得”之类的助词,“啊”,“哈”,“呀”之类的感叹词,“从而”“以”“却”之类的介词。这些词被称为停止词,因为它们对页面主要意思没什么影响。英文中的常见停止词如the,a,an,to,of 等。

搜索引擎在索引页面之前会去掉这些停止词,使索引数据主题更为突出,减少无谓的计算量。

(4)消除噪声

绝大部分页面上还有一部分内容对页面主题也没有什么贡献,比如版权声明文字、导航条、广告等。以常见的博客导航为例,几乎每个博客页面上都会出现文章分类、历史存档等导航内容,但是这些页面本身与“分类”、“历史”这些词都没有任何关系。

用户搜索“分类”“历史”这些关键词时仅仅因为页面上有这些词出现而返回博客帖子是毫无意义的,完全不相关。所以这些区块都属于噪声,对页面主题只能起到分散作用。

搜索引擎需要识别并消除这些噪声,排名时不使用噪声内容。消噪的基本方法是根据HTML标签对页面分块,区分出页头、导航、正文、页脚、广告等区域,在网站上大量重复出现的区块往往属于噪声。对页面进行消噪后,剩下的才是页面主体内容。

(5)去重

同一篇文章经常会重复出现在不同网站以及同一个网站的不同网址上,搜索引擎并不喜欢这种重复性的内容。用户搜索时,如果在前两页看到的都是来自不同网站的同一篇文章,用户体验就太差了,虽然都是内容相关的。搜索引擎希望只返回相同文章中的一篇,所以在进行索引前还需要识别和删除重复内容,这个过程就称为去重。

去重的基本方法是对页面特征关键词计算指纹,也就是说从页面主体内容中选取最有代表性的一部分关键词(经常是出现频率最高的关键词),然后计算这些关键词的数字指纹。这里的关键词选取是在分词、去停止词、消噪之后。实验表明,通常选取10 个特征关键词就可以达到比较高的计算准确性,再选取更多词对去重准确性提高的贡献也就不大了。

了解了搜索引擎的去重算法,SEO?人员就应该知道简单地增加“的,地,得”、调换段落顺序这种所谓伪原创,并不能逃过搜索引擎的去重算法,因为这样的操作无法改变文章的特征关键词。而且搜索引擎的去重算法很可能不止于页面级别,而是进行到段落级别,混合不同文章、交叉调换段落顺序也不能使转载和抄袭变成原创。

(6)正向索引,简称为索引。

经过前五步之后,接下来搜索引擎将提取文中关键词,按分词程序划分好的词,同时记录每个词在页面中出现的频率、出现的次数、格式(如加粗、倾斜、黑体、H标签、加颜色、锚文字等)、位置(如页面第一段文字或者最后一段等)。然后把这些词语记录为串关键词集合,那么这些词的相关信息如格式、权重等也会记录在案。

实际在搜索引擎中每个关键词也被转换为ID形式记录,然后每个文件ID对应一串关键词ID。这种每个文件ID对应一个串关键词ID这样的数据结构被称之为正向索引。

(7)倒排索引

正向索引还不能直接运用到关键词排名,假设用户搜索关键词2,那么搜索引擎讲扫描索引库中所有文件,这样时间太长无法满足用户返回结果的速度,所以这里运用到了倒排索引,把关键词ID映射到文章ID,比如关键词2对应文章A、文章B,如此一来大大缩短搜索引擎扫描索引库中的文件,缩短扫描时间。

(8)链接的计算

到了这一步基本就是计算链接了,页面中有哪些导入链接,这些链接都指向哪里,哪些链接又指向这个页面,链接用的是URL还是锚文字,这些复杂的链接关系网就形成了页面的链接权重,此时锚文本将被作为重要排名依据,当量广泛的锚文本将被列入计算关键词排名的步骤中。

(9)特殊文件处理

除了HTML文件外,搜索引擎通常还能抓取和索引以文字为基础的多种文件类型,如PDF、Word、WPS、XLS、PPT、TXT文件等。我们在搜索结果中也经常会看到这些文件类型。但目前的搜索引擎还不能处理图片、视频、Flash这类非文字内容,也不能执行脚本和程序。

虽然搜索引擎在识别图片及从Flash中提取文字内容方面有些进步,不过距离直接靠读取图片、视频、Flash内容返回结果的目标还很远。对图片、视频内容的排名还往往是依据与之相关的文字内容。

三、排名

经过搜索引擎蜘蛛抓取页面,索引程序计算得到倒排索引后,搜索引擎就准备好可以随时处理用户搜索了。用户在搜索框填入关键词后,排名程序调用索引库数据,计算排名显示给用户,排名过程是与用户直接互动的。

(1)搜索词处理

搜索引擎接收到用户输入的搜索词后,需要对搜索词做一些处理,搜索词处理包括如下几方面:

1)中文分词。与页面索引时一样,搜索词也必须进行中文分词,为以词为基础的关键词组合。分词原理与页面分词相同。

2)去停止词。和索引时一样,搜索引擎也需要把搜索词中的停止词去掉,最大限度地提高排名相关性及效率。

3)指令处理。查询词完成分词后,搜索引擎的默认处理方式是在关键词之间使用“与”逻辑。

也就是说用户搜索“减肥方法”时,程序分词为“减肥”和“方法”两个词,搜索引擎排序时默认认为,用户寻找的是既包含“减肥”,也包含“方法”的页面。只包含“减肥”不包含“方法”,或者只包含“方法”不包含“减肥”的页面,被认为是不符合搜索条件的。当然,这只是极为简化的为了说明原理的说法,实际上我们还是会看到只包含一部分关键词的搜索结果。

另外用户输入的查询词还可能包含一些高级搜索指令,如加号、减号等,搜索引擎都需要做出识别和相应处理。有关高级搜索指令,后面还有详细说明。

4)拼写错误矫正。用户如果输入了明显错误的字或英文单词拼错,搜索引擎会提示用户正确的用字或拼法.

5)整合搜索触发。某些搜索词会触发整合搜索,比如明星姓名就经常触发图片和视频内容,当前的热门话题又容易触发资讯内容。哪些词触发哪些整合搜索,也需要在搜索词处理阶段计算。

(2)文件匹配

搜索词经过处理后,搜索引擎得到的是以词为基础的关键词集合。文件匹配阶段就是找出含有所有关键词的文件。在索引部分提到的倒排索引使得文件匹配能够速度完成。

(3)初始子集的选择

找到包含所有关键词的匹配文件后,还不能进行相关性计算,因为找到的文件经常会有几十万几百万,甚至上千万个。要对这么多文件实时进行相关性计算,需要的时间还是比较长的。

实际上用户并不需要知道所有匹配的几十万、几百万个页面,绝大部分用户只会查看前两页,也就是前20个结果。搜索引擎也并不需要计算这么多页面的相关性,而只要计算最重要的一部分页面就可以了。常用搜索引擎的人都会注意到,搜索结果页面通常最多显示100个。用户点击搜索结果页面底部的“下一页”链接,最多也只能看到第100页,也就是1000个搜索结果。

所以搜索引擎只需要计算前1000个结果的相关性,就能满足要求。但问题在于,还没有计算相关性时,搜索引擎又怎么知道哪一千个文件是晟相关的?所以用于最后相关性计算的初始页面子集的选择,必须依靠其他特征而不是相关性,其中最主要的就是页面权重。由于所有匹配文件都已经具备了最基本的相关性(这些文件都包含所有查询关键词),搜索引擎通常会用非相关性的页面特征选出一个初始子集。初始子集的数目是多少?几万个?或许更多,外人并不知道。不过可以肯定的是,当匹配页面数目巨大时,搜索引擎不会对这么多页面进行计算,而必须选出页面权重较高的一个子集,再对子集中的页面进行相关性计算。

(4)相关性计算

1)关键词常用程度

越常用的词对搜索词的意义贡献越小,越不常用的词对搜索词的 意义贡献越大。举个例子,假设用户输入的搜索词是“我们冥王星”。“我们”这个词常用程度非常高,在很多页面上会出现,它对“我们冥王星”这个搜索词的辨 识程度和意义相关度贡献就很小。找出那些包含“我们”这个词的页面,对搜索排名相关性几乎没有什么影响,有太多页面包含“我们”这个词。

而“冥王星”这个词常用程度就比较低,对“我们冥王星”这个搜索词的意义贡献要大得多。那些包含“冥王星”这个词的页面,对“我们冥王星”这个搜索词会更为相关。

搜索引擎对搜索词串中的关键词并不是一视同仁地处理,而是根据常用程度进行加权。不常用的词加权系数高,常用词加权系数低,排名算法对不常用的词给予更多关注。

2)词频及密度。

一般认为在没有关键词堆积的情况下,搜索词在页面中出现的次数多,密度越高,说明页面与搜索词越相关。当然这只是一个大致规律,实际情况未必如此,所以相关性计算还有其他因素。出现频率及密度只是因素的一部分,而且重要程度越来越低。

3)关键词位置及形式。

就像在索引部分中提到的,页面关键词出现的格式和位置都被记录在索引库中。关键词出现在比较重要的位置,如标题标签、黑体、H1等,说明页面与关键词越相关。这一部分就是页面SEO所要解决的。

4)关键词距离。

切分后的关键词完整匹配地出现,说明与搜索词最相关。比如搜索“减肥方法”时,页面上连续完整出现“减肥方法”四个字是最相关的。如果“减肥”和“方法”两个词没有连续匹配出现,出现的距离近一些,也被搜索引擎认为相关性稍微大一些。

5)链接分析及页面权重。

除了页面本身的因素,页面之间的链接和权重关系也影响关键词的相关性,其中最重要的是锚文字。页面有越多以搜索词为锚文字的导入链接,说明页面的相关性越强。链接分析还包括了链接源页面本身的主题、锚文字周围的文字等。

(5)排名过滤及调整

选出匹配文件子集、计算相关性后,大体排名就已经确定了。之后搜索引擎可能还有一些过滤算法,对排名进行轻微调整,其中最主要的过滤就是施加惩罚。一些有作弊嫌疑的页面,虽然按照正常的权重和相关性计算排到前面,但搜索引擎的惩罚算法却可能在最后一步把这些页面调到后面去。典型的例子是百度的11位,Google的负6、负30、负950等算泫。

(6)排名显示

所有排名确定后,排名程序调用原始页面的标题标签、说明标签、快照日期等数据显示在页面上。有时搜索引擎需要动态生成页面摘要,而不是调用页面本身的说明标签。

(7)搜索缓存

用户搜索的关键词有很大一部分是重复的。按照2/8 定律,20%的搜索词占到了总搜索次数的80%。按照长尾理论,最常见的搜索词没有占到80%那么多,但通常也有一个比较粗大的头部,很少一部分搜索词占到了所有搜索次数的很大一部分。尤其是有热门新闻发生时,每天可能有几百万人搜索完全相同的关键词。

如果每次搜索都重新处理排名可以说是很大的浪费。搜索引擎会把最常见的搜索词存入缓存,用户搜索时直接从缓存中调用,而不必经过文件匹配和相关性计算,大大提高排名效率,降低搜索反应时间。

(8)查询及点击日志

搜索用户的IP 地址,搜索的关键词,搜索时间以及点击了哪些结果页面,搜索引擎都记录形成日志。这些日志文件中的数据对搜索引擎判断搜索结果质量,调整搜索算法,预期搜索趋势等都有重要意义。

 标签:

评论留言

我要留言

欢迎参与讨论,请在这里发表您的看法、交流您的观点。