搜索引擎的工作过程是什么

  搜索引擎工作过程非常复杂,我们简单介绍搜索引擎是怎样实现网页排名的。这里介绍的相对于真正的搜索引擎技术来说只是皮毛,不过对SEO 人员已经足够用了。

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

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

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

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

  爬行和抓取

  爬行和抓取是搜索引擎工作的第一步,完成数据收集的任务。

  蜘蛛

  搜索引擎用来爬行和访问页面的程序被称为蜘蛛(spider),也称为机器人(bot)。搜索引擎蜘蛛访问网站页面时类似于普通用户使 用的浏览器。蜘蛛程序发出页面访问请求后,服务器返回HTML 代码,蜘蛛程序把收到的代码存入原始页面数据库。搜索引擎为了提高爬行和抓取速度,都使用多个蜘蛛并发分布爬行。蜘蛛访问任何一个网站时,都会先访问网站 根目录下的robots.txt 文件。如果robots.txt 文件禁止搜索引擎抓取某些文件或目录,蜘蛛将遵守协议,不抓取被禁止的网址。

  跟踪链接

  为了抓取网上尽量多的页面,搜索引擎蜘蛛会跟踪页面上的链接,从一个页面爬到下一个页面,就好像蜘蛛在蜘蛛网上爬行那样,这也就是搜索 引擎蜘蛛这个名称的由来。整个互联网是由相互链接的网站及页面组成的。从理论上说,蜘蛛从任何一个页面出发,顺着链接都可以爬行到网上的所有页面。当然, 由于网站及页面链接结构异常复杂,蜘蛛需要采取一定的爬行策略才能遍历网上所有页面。

  最简单的爬行遍历策略分为两种,一是深度优先,二是广度优先。

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

  广度优先是指蜘蛛在一个页面上发现多个链接时,不是顺着一个链接一直向前,而是把页面上所有第一层链接都爬一遍,然后 再沿着第二层页面上发现的链接爬向第三层页面。从理论上说,无论是深度优先还是广度优先,只要给蜘蛛足够的时间,都能爬完整个互联网。在实际工作中,蜘蛛 的带宽资源、时间都不是无限的,也不可能爬完所有页面。实际上最大的搜索引擎也只是爬行和收录了互联网的一小部分。

  深度优先和广度优先通常是混合使用的,这样既可以照顾到尽量多的网站(广度优先),也能照顾到一部分网站的内页(深度优先)。

  预处理

  提取文字

  现在的搜索引擎还是以文字内容为基础。蜘蛛抓取到的页面中的HTML 代码,除了用户在浏览器上可以看到的可见文字外,还包含了大量的HTML 格式标签、Javascript 程序等无法用于排名的内容。搜索引擎预处理首先要做的就是从HTML 文件中去除标签、程序,提取出可以用于排名处理的网页面文字内容。除了可见文字,搜索引擎也会提取出一些特殊的包含文字信息的代码,如Meta 标签中的文字,图片替代文字,Flash 文件的替代文字,链接锚文字等。

  中文分词

  分词是中文搜索引擎特有的步骤。搜索引擎存储和处理页面,以及用户搜索都是以词为基础。英文等语言单词与单词之间有空格分隔,搜索引擎 索引程序可以直接把句子划分为单词的集合。而中文词与词之间没有任何分隔符,一个句子中的所有字和词都是连在一起的。搜索引擎必须首先分辨哪几个字组成一 个词,哪些字本身就是一个词。比如“减肥方法”将被分词为“减肥”和“方法”两个词。

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

  基于词典匹配的方法是指,将待分析的一段汉字与一个事先造好的词典中的词条进行匹配,在待分析汉字串中扫描到词典中已 有的词条则匹配成功,或者说切分出一个单词。按照扫描方向,基于词典的匹配法可以分为正向匹配和逆向匹配。按照匹配长度优先级的不同,又可以分为最大匹配 和最小匹配。将扫描方向和长度优先混合,又可以产生正向最大匹配、逆向最大匹配等不同方法。词典匹配方法计算简单,其准确度很大程度上取决于词典的完整性 和更新情况。

  基于统计的分词方法指的是分析大量文字样本,计算出字与字相邻出现的统计概率,几个字相邻出现越多,就越可能形成一个 单词。基于统计的方法优势是对新出现的词反应更快速,也有利于消除歧义。基于词典匹配和统计的两种分词方法各有优劣,实际使用中的分词系统都是混合使用两 种方法,达到快速高效,又能识别生词、新词,消除歧义。

  搜索引擎对页面的分词取决于词库的规模、准确性和分词算法的好坏,而不是取决于页面本身如何,所以SEO 人员对分词所能做的很少。唯一能做的是在页面上用某种形式提示搜索引擎,某几个字应该被当作一个词处理,尤其是可能产生歧义的时候,比如在页面标题、h1 标签以及黑体中出现关键词。如果页面是关于“和服”的内容,那么可以把“和服”这两个字特意标为黑体。如果页面是关于“化妆和服装”,可以把“服装”两个字标为黑体。这样,搜索引擎对页面进行分析时就知道标为黑体的应该是一个词。

  去停止词

  无论英文中文,页面内容中都会有一些出现频率很高,却对内容没有任何影响的词,如“的”,“地”,“得”之类的助词,“啊”,“哈”, “呀”之类的感叹词,“从而”,“以”,“却”之类的介词。这些词被称为停止词,因为它们对页面主要意思没什么影响。英文中的常见停止词如 the,a,an,to,of 等。搜索引擎在索引页面之前会去掉这些停止词,使索引数据主题更为突出,减少无谓的计算量。

  消除噪声

  绝大部分页面上还有一部分内容对页面主题也没有什么贡献,比如版权声明文字、导航条、广告等。以常见的博客导航为例,几乎每个博客页面 上都会出现文章分类、历史存档等导航内容,但是这些页面本身与“分类”、“历史”这些词都没有任何关系。用户搜索“历史”,“分类”这些关键词时仅仅因为 页面上有这些词出现而返回博客帖子是毫无意义的,完全不相关。

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

  去重

  搜索引擎还需要对页面进行去重处理。同一篇文章经常会重复出现在不同网站以及同一个网站的不同网址上,搜索引擎并不喜欢这种重复性的内 容。用户搜索时,如果在前两页看到的都是来自不同网站的同一篇文章,用户体验就太差了,虽然都是内容相关的。搜索引擎希望只返回相同文章中的一篇,所以在 进行索引前还需要识别和删除重复内容,这个过程就称为去重。去重的基本方法是对页面特征关键词计算指纹,也就是说从页面主体内容中选取最有代表性的一部分 关键词(经常是出现频率最高的关键词),然后计算这些关键词的数字指纹。

  这里的关键词选取是在分词、去停止词、消噪之后。实验表明,通常选取10 个特征关键词就可以达到比较高的计算准确性,再选取更多词对去重准确性提高的贡献也就不大了。了解了搜索引擎的去重算法,SEO 人员就应该知道简单地增加“的,地,得”、调换段落顺序这种所谓伪原创,并不能逃过搜索引擎的去重算法,因为这样的操作无法改变文章的特征关键词。而且搜 索引擎的去重算法很可能不止于页面级别,而是进行到段落级别,混合不同文章、交叉调换段落顺序也不能使转载和抄袭变成原创。

  正向索引也可以简称为索引。

  经过文字提取、分词、消噪、去重后,搜索引擎得到的就是独特的、能反映页面主体内容的、以词为单位的内容。接下来搜索引擎索引程序就可以提取关键词,按照 分词程序划分好的词,把页面转换为一个关键词组成的集合,同时记录每一个关键词在页面上的出现频率、出现次数、格式(如出现在标题标签、黑体、H 标签、锚文字等)、位置(如页面第一段文字等)。这样,每一个页面都可以记录为一串关键词集合,其中每个关键词的词频、格式、位置等权重信息也都记录在 案。

  倒排索引

  正向索引还不能直接用于排名。假设用户搜索关键词2,如果只存在正向索引的话,排名程序需要扫描所有索引库中的文件,找出包含关键词2 的文件,再进行相关性计算。这样的计算量无法满足实时返回排名结果的要求。所以搜索引擎会将正向索引数据库重新构造为倒排索引,把文件对应到关键词的映射 转换为关键词到文件的映射。在倒排索引中关键词是主键,每个关键词都对应着一系列文件,这些文件中都出现了这个关键词。这样当用户搜索某个关键词时,排序 程序在倒排索引中定位到这个关键词,就可以马上找出所有包含这个关键词的文件。

  链接关系计算

  链接关系计算也是预处理中很重要的一部分。现在所有的主流搜索引擎排名因素中都包含网页之间的链接流动信息。搜索引擎在抓取页面内容 后,必须事前计算出页面上有哪些链接指向哪些其他页面?每个页面有哪些导入链接?链接使用了什么锚文字?这些复杂的链接指向关系形成了网站和页面的链接权 重。Google PR 值就是这种链接关系的最主要体现之一。其他搜索引擎也都进行类似计算,虽然他们并不称之为PR。

  特殊文件处理

  除了HTML 文件外,搜索引擎通常还能抓取和索引以文字为基础的多种文件类型,如PDF、Word、WPS、XLS、PPT、TXT 文件等。我们在搜索结果中也经常会看到这些文件类型。但目前的搜索引擎还不能处理图片、视频、Flash 这类非文字内容,也不能执行脚本和程序。虽然搜索引擎在识别图片以及从Flash 中提取文字内容方面有些进步,不过距离直接靠读取图片、视频、Flash 内容返回结果的目标还很远。对图片、视频内容的排名还往往是靠与之相关的文字内容,详细情况可以参考后面的整合搜索部分。

  排名

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

  搜索词处理

  搜索引擎接收到用户输入的搜索词后,需要对搜索词做一些处理,才能进入排名过程。搜索词处理包括几方面:

  中文分词

  与页面索引时一样,搜索词也必须进行中文分词,将查询字符串转换为以词为基础的关键词组合。分词原理与页面分词相同。

  去停止词

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

  指令处理

  查询词完成分词后,搜索引擎的缺省处理方式是在关键词之间使用“与”逻辑。也就是说用户搜索“减肥方法”时,程序分词为“减肥”和“方 法”两个词,搜索引擎排序时缺省认为,用户寻找的是既包含“减肥”,也包含“方法”的页面。只包含“减肥”不包含“方法”,或者只包含“方法”不包含“减 肥”的页面,被认为是不符合搜索条件的。当然,这只是极为简化的为了说明原理的说法,实际上我们还是会看到只包含一部分关键词的搜索结果。另外用户输入的 查询词还可能包含一些高级搜索指令,如加号、减号等,搜索引擎都需要做出识别和相应处理。

  文件匹配

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

  初始子集的选择

  找到包含所有关键词的匹配文件后,还不能进行相关性计算,因为找到的文件经常会有几十万几百万,甚至上千万个。要对这么多文件实时进行 相关性计算,需要的时间还是比较长。实际上用户并不需要知道所有匹配的几十万几百万个页面,绝大部分用户只会查看前两页,也就是前二十个结果。搜索引擎也 并不需要计算这么多页面的相关性,而只要计算最重要的一部分页面就可以了。常用搜索引擎的人都会注意到,搜索结果页面通常最多只显示一百个。用户点击搜索 结果页面底部的“下一页”链接,最多也只能看到第一百页,也就是一千个搜索结果。百度则通常返回76 页结果。

  相关性计算

  选出初始子集后,对子集中的页面计算关键词相关性。计算相关性是排名过程中最重要的一步。相关性计算是搜索引擎算法中最令SEO 感兴趣的部分。影响相关性的主要因素包括几方面。

  关键词常用程度

  经过分词后的多个关键词,对整个搜索字符串的意义贡献并不相同。越常用的词对搜索词的意义贡献越小,越不常用的词对意义贡献越大。举个 例子,假设用户输入的搜索词是“我们冥王星”。“我们”这个词常用程度非常高,在很多页面上会出现,它对“我们冥王星”这个搜索词的辨识程度和意义相关度 贡献就很小。找出那些包含“我们”这个词的页面,对搜索排名相关性几乎没有什么影响,有太多页面包含“我们”这个词。而“冥王星”这个词常用程度就比较 低,对“我们冥王星”这个搜索词的意义贡献要大得多。那些包含“冥王星”这个词的页面,对“我们冥王星”这个搜索词会更为相关。常用词的极致就是停止词, 对页面意义完全没有影响。

  所以搜索引擎对搜索词串中的关键词并不是一视同仁地处理,而是根据常用程度进行加权。不常用的词加权系数高,常用词加权系数低, 排名算法对不常用的词给予更多关注。我们假设A、B 两个页面都各出现“我们”及“冥王星”两个词。但是“我们”这个词在A 页面出现于普通文字,“冥王星”这个词在A 页面出现于标题标签中。B 页面正相反,“我们”出现在标题标签中,而“冥王星”出现在普通文字中。那么针对“我们冥王星”这个搜索词,A 页面将更相关。

  词频及密度

  一般认为在没有关键词堆积的情况下,搜索词在页面中出现的次数多,密度比较高,说明页面与搜索词越相关。当然这只是一个大致规律,实际 情况未必如此,所以相关性计算还有其他因素。出现频率及密度只是因素的一部分,而且重要程度越来越低。关键词位置及形式像在索引部分中提到的,页面关键词 出现的格式和位置都被记录在索引库中。关键词出现在比较重要位置,如标题标签、黑体、H1 等,说明页面与关键词越相关。这一部分就是页面SEO所要解决的。

  关键词距离

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

  链接分析及页面权重

  除了页面本身的因素,页面之间的链接和权重关系也影响关键词的相关性,其中最重要的是锚文字。页面有越多以搜索词为锚文字的导入链接, 说明页面的相关性越强。链接分析还包括了链接源页面本身的主题,锚文字周围的文字等。排名过滤及调整选出匹配文件子集、计算相关性后,大体排名就已经确定 了。之后搜索引擎还可能有一些过滤算法,对排名进行轻微调整,其中最主要的过滤就是施加惩罚。一些有作弊嫌疑的页面,虽然按照正常的权重和相关性计算排到 前面,但搜索引擎的惩罚算法却可能在最后一步把这些页面调到后面去。典型的例子是百度的11 位,Google 的负6,负30,负950 等算法。

  排名显示

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

  搜索缓存

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

  搜索引擎会把最常见的搜索词存入缓存,用户搜索时直接从缓存中调用,而不必经过文件匹配和相关性计算,大大提高排名效率,降低搜索反应时间。查询及点击日志搜 索用户的IP 地址,搜索的关键词,搜索时间以及点击了哪些结果页面,搜索引擎都记录形成日志。这些日志文件中的数据对搜索引擎判断搜索结果质量,调整搜索算法,预期搜 索趋势等都有重要意义。

  上面我们简单介绍了搜索引擎的工作过程。当然实际搜索引擎的工作步骤与算法是非常非常复杂的。上面的说明很简单,但其中有很多技术难点。搜索引擎还在不断 优化算法,优化数据库格式。不同搜索引擎的工作步骤也会有差异。但大致上所有主流搜索引擎的基本工作原理都是如此,在过去几年以及可以预期的未来几年,都不会有实质性改变。

  本文由郑州脑瘫医院首家原创,A5首发,希望对各位站长有所帮助,记得转载时留下本文供稿站长信息http://www.naotan0371.com,欢迎转摘。

时间: 2024-08-04 11:41:17

搜索引擎的工作过程是什么的相关文章

浅谈搜索引擎的工作原理及未来算法调整方向

在A5站长网上摸爬滚打了多年了,期间也写了好几篇的文章,其中有一篇<浅谈地方汽车门户网站运营的四个问题>还被推荐到了首页,我发给我们的朋友看的时候,大家对我这个曾经的菜鸟也开始刮目相看了,这让我本人在这段时间身心都愉悦的很,现在又忍不住在A5上发表一下我对搜索引擎工作原理及算法上的认识,可能比较的浅陋,但是有了想法,不吐还是不快的! 做网站SEO是一个非常枯燥的过程,很多人估计除了吃饭睡觉剩下来的时间就奉献给了电脑了,这样怎么能够把身体搞好呢?这不现在每天爬六楼都累得不行,这对于一个大小伙子实

了解搜索引擎的工作原理提升SEO思维境界

虽然做seo不是研究搜索引擎的算法,也不用去编写搜索引擎那么复杂的计算方式,不过武汉seo刘俊认为稍微了解一下搜索引擎的计算方式和工作原理可以有效的提升seo的境界,让我们站长在做seo的时候明白自己究竟为什么这样做,这样才能从根本上提升seo水平. 1.搜索引擎工作大致可以分为三个阶段 阶段一.蜘蛛爬行页面抓取信息 蜘蛛是搜索引擎爬行互联网庞大信息的程序,这里我们只需要知道蜘蛛是沿着html链接一直往下爬行的就可以了,这也是我们为什么要做好站内锚文本链接的原因,让蜘蛛从站外链接爬行到站内可以有

编译器的工作过程

源码要运行,必须先转成二进制的机器码.这是编译器的任务. 比如,下面这段源码(假定文件名叫做test.c). #include <stdio.h> int main(void) { fputs("Hello, world!\n", stdout); return 0; } 要先用编译器处理一下,才能运行. $ gcc test.c $ ./a.out Hello, world! 对于复杂的项目,编译过程还必须分成三步. $ ./configure $ make $ make

jQuery入门(20) jQuery UI基本工作过程

本篇介绍JQuery UI组件的基本工作过程,以进程条(Progressbar)为例介绍JQuery UI组件工作的 基本过程. 初始化 大部分JQuery Ui组件都可以保持其状态,因此为了能够跟踪UI组件的状 态,jQuery UI组件也有一个生命周期,这个生命周期从初始化开始,为了初始化一个UI组件,一般在 某个HTML元素调用UI组件(插件)方法.,比如 $( "#elem" ).progressbar(); 这 个方法初始化id=elem的元素,因为我们调用progressb

FreeBSD DHCP的工作过程

设置DHCP 动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)是用于对多个客户计算机集中分配IP地址以及IP地址相关的信息的协议,这样就能将IP地址和TCP/IP的设置统一管理起来,而避免不必要的地址冲突的问题,因此常常用在网络中对众多DOS/Windows计算机的管理方面,节省了网络管理员手工设置和分配地址的麻烦. 除了能够方便管理之外,DHCP还能略微达到节省IP地址的目的.假设网络中有50个计算机,但只有40个 IP地址,但是这50台计算

设计-计算机系统的工作过程

问题描述 计算机系统的工作过程 系统开始到结束的详细过程,希望解答越详细越好,谢谢!!!!!!!!!! 推荐学下操作系统的最好是设计原理书籍. 解决方案 限于你的背景知识不足,建议你看些科普书籍,对计算机有个大概了解.操作系统的书籍你可以去图书馆借,盲目买来看不懂就悲催了.

实例解析java + jQuery + json工作过程(获取JSON数据)

前天刚刚写的一篇关于<实例解析java + ajax(jQuery) + json工作过程(登录)>的文章引起了网友们的关注和好评, 自从本站的账务管理系统(个人版)开源 以后很多网友询问系统的实现方式,我一一解释--,为此今天写文章详细讲解系统功能的实现细节. 以本站的开源项目账务管理系统的"债务人"模块为例子讲解 一.效果预览 二.实现方式 基本思想就是绑定列表中的人员名称触发事件,获得当前人员的ID发送ajax请求到后台,后台根据ID查询详细信息,返回JSON数据结果

【科普】搜索引擎的工作原理

昨天的文章 全球化的误区,本地化的机会 ,评论里,有人说,搜索引擎技术似乎不需要本地化,这一看就是彻底不懂这个领域的人讲的.当然,实话说,如果有人说,google在中文本地化方面做得非常好,我是可以部分同意的,同意的比例可能会比google工程师少一些.但我相信google工程师也会告诉你,搜索引擎是需要本地化的. 今天写篇科普文,讲讲搜索引擎的技术机理和市场竞争的一些特点.当然,作为从事或有兴趣从事流量运营的朋友,是可以用另一个角度去理解本文. 搜索引擎的核心技术架构,大体包括以下三块,第一,

编译器的工作过程(转)

码要运行,必须先转成二进制的机器码.这是编译器的任务. 比如,下面这段源码(假定文件名叫做test.c). #include <stdio.h> int main(void) { fputs("Hello, world!\n", stdout); return 0; } 要先用编译器处理一下,才能运行. $ gcc test.c $ ./a.out Hello, world! 对于复杂的项目,编译过程还必须分成三步. $ ./configure $ make $ make