搜索引擎原理

搜索引擎的基本架构是什么?为什么要设计搜索引擎架构?

  作为一名优秀的SEOer,应该了解搜索引擎的工作原理,比如基本的架构。

  今天,小小课堂SEO自学网带来的是《搜索引擎的基本架构》。希望本次的SEO技术培训对大家有所帮助。

搜索引擎的基本架构-小小课堂SEO培训教程

  一、什么是搜索引擎的架构?

  搜索引擎架构可以当作软件架构来理解。

  ① 软件架构

  百度百科对于软件架构的描述如下:

  软件架构,是指一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。

  ② 搜索引擎架构

  那么搜索引擎的架构,就是用于指导搜索引擎系统中重要的组件以及组件之间关系而设计的抽象模式。

  二、设计搜索引擎架构的目标是什么?

  SEOer应该知道为什么要设计搜索引擎架构,主要有以下两点:

  ① 搜索效果

  搜索引擎致力于优化用户搜索体验,当用户搜索某个词之后,可以给予用户更多更精准的结果。这就是在质量层面上的目标。

  ② 搜索效率

  搜索引擎追求更快地展现出用户查询词的搜索结果,也是为了提升用户搜索体验,试想如果我们搜索一个词,搜索引擎一分钟后才显示出结果,这样的搜索引擎在这个时代是要被淘汰的。这就是在速度层面上的目标。

  小结:因为用户需要一个高效的搜索引擎系统,对搜索引擎有效果和效率的要求,所以,结构的目标也就是这两点了。

  三、搜索引擎的基本架构是什么?

  对于SEOer而言,只需要在抽象模式上了解搜索引擎架构即可,也无需关注过多的数学公式与算法。

  搜索引擎基本架构主要有索引处理和查询处理。

  ① 索引处理

搜索引擎的基本架构-小小课堂SEO培训教程

索引过程主要由以下几个组件来完成:

  1)文本采集组件

  文本采集组件,主要用于发现、存储和传递文档。

  2)文本转换组件

  文本转换组件,主要用于提取文档中所有内容和元数据,同时将文本转换为索引项。

  元数据可以理解为页面的基本参数,如类型、结构、多少字等等。

  索引项,又可以称之为特征,是对文档内容的一部分,符合要求的文档的索引会被存放在索引表中用于搜索。

  3)索引创建组件

  索引创建组件,利用文本转换组件输出的文档和索引项,创建索引表,从而实现快速搜索。

  索引的创建非常重要,尤其是针对互联网的信息爆炸时代,对于新的文档加入时,应高效完成索引创建。为了实现高效,一般都采用的倒排索引。

  ② 查询处理

搜索引擎的基本架构-小小课堂SEO培训教程

查询处理主要由以下几个组件来完成:

  1)用户交互组件

  用户交互组件,提供了用户查询和搜索引擎展现搜索结果之间的接口。

  搜索引擎接收到用户的查询词后,在索引库中找到相关文档,按照程序认为的最合理的索引排序结果展现给用户。

  2)排序组件

  排序组件,从用户交互组件中获得查询词,并且根据一定的模型给出一个得分从高到低排序的文档。

  排序的高效依赖于搜索引擎检索技术的高低,排序的质量取决于搜索引擎的检索模式。

  3)评价组件

  评价组件,主要用于评测和评价搜索引擎系统的效果和效率的目标。

  一来可以统计大量搜索日志来记录和分析用户行为,二来评价的结果用来调整和改善排序组件的性能,从而提升用户的搜索体验度。

百度、谷歌搜索引擎原理

  第一节 搜索引擎原理

  1、基本概念

  来源于中文wiki百科的解释:(网络)搜索引擎指自动从互联网搜集信息,经过一定整理以后,提供给用户进行查询的系统。

  来源于英文wiki百科的解释:Web search engines providean interface to search for information on the World WideWeb.Information may consist of web pages, images and other types offiles.(网络搜索引擎为用户提供接口查找互联网上的信息内容,这些信息内容包括网页、图片以及其他类型的文档)

  2、分类

  按照工作原理的不同,可以把它们分为两个基本类别:全文搜索引擎(FullTextSearch Engine)和分类目录Directory)。

  分类目录则是通过人工的方式收集整理网站资料形成数据库的,比如雅虎中国以及国内的搜狐、新浪、网易分类目录。另外,在网上的一些导航站点,也可以归属为原始的分类目录,比如“网址之家”(http://www.hao123.com/)。

  全文搜索引擎通过自动的方式分析网页的超链接,依靠超链接和HTML代码分析获取网页信息内容,并按事先设计好的规则分析整理形成索引,供用户查询。

  两者的区分可用一句话概括:分类目录是人工方式建立网站的索引,全文搜索是自动方式建立网页的索引。(有些人经常把搜索引擎和数据库检索相比较,其实是错误的)。

  3、全文搜索的工作原理

  全文搜索引擎一般信息采集、索引、搜索三个部分组成,详细的可由搜索器、分析器、索引器、检索器和用户接口等5个部分组成

  (1)信息采集(Webcrawling):信息采集的工作由搜索器和分析器共同完成,搜索引擎利用称为网络爬虫(crawlers)、网络蜘蛛(spider)或者叫做网络机器人(robots)的自动搜索机器人程序来查询网页上的超链接。

  进一步解释一下:"机器人"实际上是一些基于Web的程序,通过请求Web站点上的HTML网页来对采集该HTML网页,它遍历指定范围内的整个Web空间,不断从一个网页转到另一个网页,从一个站点移动到另一个站点,将采集到的网页添加到网页数据库中。"机器人"每遇到一个新的网页,都要搜索它内部的所有链接,所以从理论上讲,如果为"机器人"建立一个适当的初始网页集,从这个初始网页集出发,遍历所有的链接,"机器人"将能够采集到整个Web空间的网页。

  网上后很多开源的爬虫程序,可以到一些开源社区中查找。

  关键点1:核心在于html分析,因此严谨的、结构化的、可读性强、错误少的html代码,更容易被采集机器人所分析和采集。例如,某个页面存在<body这样的标签或者没有这样的结尾,在网页显示是没有问题的,但是很有可能会被采集拒绝收录,在例如类似../../***.htm这样的超链接,也有可能造成蜘蛛无法识别。这也是需要推广web标准的原因之一,按照web标准制作的网页更容易被搜索引擎检索和收录。

  关键点2:搜索机器人有专门的搜索链接库,在搜索相同超链接时,会自动比对新旧网页的内容和大小,如果一致,则不采集。因此有人担心修改后的网页是否能被收录,这是多余的。

  (2)索引(Indexing):搜索引擎整理信息的过程称为“建立索引”。搜索引擎不仅要保存搜集起来的信息,还要将它们按照一定的规则进行编排。索引可以采用通用的大型数据库,如ORACLE、Sybase等,也可以自己定义文件格式进行存放。索引是搜索中较为复杂的部分,涉及到网页结构分析、分词、排序等技术,好的索引能极大的提高检索速度。

  关键点1:虽然现在的搜索引擎都支持增量的索引,但是索引创建依然需要较长的时间,搜索引擎都会定期更新索引,因此即便爬虫来过,到我们能在页面上搜索到,会有一定的时间间隔。

  关键点2:索引是区别好坏搜索的重要标志。

  (3)检索(Searching):用户向搜索引擎发出查询,搜索引擎接受查询并向用户返回资料。有的系统在返回结果之前对网页的相关度进行了计算和评估,并根据相关度进行排序,将相关度大的放在前面,相关度小的放在后面;也有的系统在用户查询之前已经计算了各个网页的网页等级(PageRank 后文会介绍),返回查询结果时将网页等级大的放在前面,网页等级小的放在后面。

  关键点1:不同搜索引擎有不同的排序规则,因此在不同的搜索引擎中搜索相同关键词,排序是不同的。

  第二节 百度搜索引擎工作方式

  我所知道的百度搜索:由于工作的关系,小生有幸一直在使用百度的百事通企业搜索引擎(该部门现已被裁员,主要是百度的战略开始向谷歌靠拢,不再单独销售搜索引擎,转向搜索服务),据百度的销售人员称,百事通的搜索核心和大搜索的相同,只有可能版本稍低,因此我有理由相信搜索的工作方式大同小异。下面是一些简单介绍和注意点:

  1、关于网站搜索的更新频率

  百度搜索可以设定网站的更新频率和时间,一般对于大网站更新频度很快,而且会专门开设独立的爬虫进行跟踪,不过百度是比较勤奋的,中小网站一般也会每天更新。因此,如果你希望自己的网站更新得更快,最好是在大型的分类目录(例如yahoosina网易)中有你的链接,或者在百度自己的相关网站中,有你网站的超链接,在或者你的网站就在一些大型网站里面,例如大型网站的blog。

  2、关于采集的深度

  百度搜索可以定义采集的深度,就是说不见得百度会检索你网站的全部内容,有可能只索引你的网站的首页的内容,尤其对小型网站来说。

  3、关于对时常不通网站的采集

  百度对于网站的通断是有专门的判断的,如果一旦发现某个网站不通,尤其是一些中小网站,百度的自动停止往这些网站派出爬虫,所以选择好的服务器,保持网站24小时畅通非常重要。

  4、关于更换IP的网站

  百度搜索能够基于域名或者ip地址,如果是域名,会自动解析为对应的ip地址,因此就会出现2个问题,第一就是如果你的网站和别人使用相同的IP地址,如果别人的网站被百度惩罚了,你的网站会受到牵连,第二就是如果你更换了ip地址,百度会发现你的域名和先前的ip地址没有对应,也会拒绝往你的网站派出爬虫。因此建议,不要随意更换ip地址,如果有可能尽量独享ip,保持网站的稳定很重要。

  5、关于静态和动态网站的采集

  很多人担心是不是类似asp?id=之类的页面很难被收集,html这样的页面容易被收集,事实上情况并没有想的这么糟,现在的搜索引擎大部分都支持动态网站的采集和检索,包括需要登陆的网站都可以检索到,因此大可不必担心自己的动态网站搜索引擎无法识别,百度搜索中对于动态的支持可以自定义。但是,如果有可能,还是尽量生成静态页面。同时,对于大部分搜索引擎,依然对脚本跳转(JS)、框架(frame)、

  Flash超链接,动态页面中含有非法字符的页面无可奈何。

  6、关于索引的消失

  前面讲过,搜索的索引需要创建,一般好的搜索,索引都是文本文件,而不是数据库,因此索引中需要删除一条记录,并不是一件方便的事情。例如百度,需要使用专门的工具,人工删除某条索引记录。据百度员工称,百度专门有一群人负责这件事情——接到投诉,删除记录,手工。当然还能直接删除某个规则下的所有索引,也就是可以删除某个网站下的所有索引。还有一个机制(未经验证),就是对于过期的网页和作弊的网页(主要是网页标题、关键词和内容不匹配),在重建索引的过程中也会被删除。

  7、关于去重

  百度搜索的去重不如谷歌的理想,主要还是判别文章的标题和来源地址,只要不相同,就不会自动去重,因此不必担心采集的内容雷同而很快被搜索惩罚,谷歌的有所不同,标题相同的被同时收录的不多。

  补充一句,不要把搜索引擎想得这么智能,基本上都是按照一定的规则和公式,想不被搜索引擎惩罚,避开这些规则即可。

  第三节 谷歌搜索排名技术

  对于搜索来说,谷歌强于百度,主要的原因就是谷歌更加公正,而百度有很多人为的因素(这也符合我国的国情),google之所以公正,源于他的排名技术PageRank。

  很多人知道PageRank,是网站的质量等级,越小表示网站越优秀。其实PageRank是依靠一个专门的公式计算出来的,当我们在google搜索关键词的时候,页面等级小的网页排序会越靠前,这个公式并没有人工干预,因此公正。

  PageRank的最初想法来自于论文档案的管理,我们知道每篇论文结尾都有参考文献,假如某篇文章被不同论文引用了多次,就可以认为这篇文章是篇优秀的文章。

  同理,简单的说,PageRank能够对网页的重要性做出客观的评价。PageRank 并不计算直接链接的数量,而是将从网页 A 指向网页 B 的链接解释为由网页 A对网页 B 所投的一票。这样,PageRank 会根据网页 B 所收到的投票数量来评估该页的重要性。此外,PageRank还会评估每个投票网页的重要性,因为某些网页的投票被认为具有较高的价值,这样,它所链接的网页就能获得较高的价值。

  Page Rank的公式这里省略,说说影响Page Rank的主要因素

  1、指向你的网站的超链接数量(你的网站被别人引用),这个数值越大,表示你的网站越重要,通俗的说,就是其它网站是否友情链接,或者推荐链接到你的网站;

  2、超链接你的网站的重要程度,意思就是一个质量好的网站有你的网站的超链接,说明你的网站也很优秀。

  3、网页特定性因素:包括网页的内容、标题及URL等,也就是网页的关键词及位置。

  第四节 新网站如何应对搜索

  以下内容是对上面分析的总结:

  1、搜索引擎为什么不收录你的网站,存在以下可能(不绝对,根据各自情况不同)

  (1)没有任何指向链接的孤岛网页,没有被收录的网站指向你的超链接,搜索引擎就无法发现你;

  (2)网站中的网页性质及文件类型(如flash、JS跳转、某些动态网页、frame等)搜索引擎无法识别;

  (3)你的网站所在服务器曾被搜索引擎惩罚,而不收录相同IP的内容;

  (4)近期更换过服务器的IP地址,搜索引擎需要一定时间重新采集;

  (5)服务器不稳定、频繁宕机,或者经不起爬虫采集的压力;

  (6)网页代码劣质,搜索无法正确分析页面内容,请至少学习一下HTML的基本语法,建议使用XHTML;

  (7)网站用robots(robots.txt)协议拒绝搜索引擎抓取的网页;

  (8)使用关键词作弊的网页,网页的关键词和内容严重不匹配,或者某些关键词密度太大;

  (9)非法内容的网页;

  (10)相同网站内存在大量相同标题的网页,或者网页的标题没有实际含义;

  2、新站如何做才正确(仅供参考)

  (1)和优秀的网站交换链接;

  (2)广泛登录各种大网站的网站目录列表;

  (3)多去质量好的论坛发言,发言要有质量,最好不要回复,发言中留下自己网站地址;

  (4)申请大网站的博客(新浪、网易、CSDN),并在博客中推广自己的网站;

  (5)使用好的建站程序,最好能生成静态页面和自动生成关键词;

  (6)重视每个网页的标题,以及区域,尽量把符合的关键词放在这些容易被搜索索引的位置,重视文章的开头部分,尽可能在文章的开始部分使用类似摘要的功能(可以学学网易的文章样式)。

  例如“基于开源jabber(XMPP)架设内部即时通讯服务的解决方案”;

  标题部分:

  关键词部分:

  文章描述部分:是著名的即时通讯服务服务器,它是一个自由开源软件,能让用户自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用。

搜索引擎工作原理解析

  本篇文章从整个搜索引擎架构技术大框架方面来学习,搜索引擎工作原理。

  1 搜索引擎基本模块

  2 爬虫

  网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,它们被广泛用于互联网搜索引擎或其他类似网站,可以自动采集所有其能够访问到的页面内容,以获取或更新这些网站的内容和检索方式。从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。

  相对于通用网络爬虫,聚焦爬虫还需要解决三个主要问题:

  (1) 对抓取目标的描述或定义;

  (2) 对网页或数据的分析与过滤;

  (3) 对URL的搜索策略。

  3 Lucene

  Lucene是一款高性能的、可扩展的信息检索(IR)工具库。信息检索是指文档搜索、文档内信息搜索或者文档相关的元数据搜索等操作。

  4 搜索用户界面

  随着搜索技术的逐渐走向成熟,搜索界面也有了一个比较固定的模式。除了基本的搜索,我们可能都会涉及到下面这些方面。

  - 输入提示词:当用户在搜索框中输入查询过程中随时给予查询提示词。对于中文来说,当用户输入拼音的时候,也能提示。

  - 相关搜索提示词:当用户对当前的搜索结果不满意时,也许换一个搜索词,就能够得到更有用的信息。一般会根据用户当前搜索词给出多个相关的提示词。可以看成是协同过滤在搜索词上的一个具体应用。

  - 相关文档:返回和搜索结果中的某一个文档类似的文档。例如:Google搜索重的“类似结果”

  - 在结果中查询:如果返回结果很多,用户肯定希望在当前的结果中进行一定的过滤搜索。

  - 分类统计/搜索:返回搜索结果在类别中的分布图。用户可以按照类别缩小搜索范围,或者在搜索结果中导航。有点类似数据仓库中的向下钻取和向上钻取。

  - 搜索热词统计界面:往往按照用户类别统计搜索词,例如按照用户所属区域或者按照用户所属部门等,当然也可以直接按照用户统计搜索热词。例如Google的Trends。

  搜索界面的改进都是以用户体验为导向,具体的还需要根据应用场景优化。

  5 计算框架MapReduce

  首先让我们来重温一下 hadoop 的四大组件:

  HDFS:分布式存储系统

  MapReduce:分布式计算系统

  YARN: hadoop 的资源调度系统

  Common: 以上三大组件的底层支撑组件,主要提供基础工具包和 RPC 框架等

  Mapreduce 是一个分布式运算程序的编程框架,是用户开发“基于 hadoop 的数据分析 应用”的核心框架

  Mapreduce 核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的 分布式运算程序,并发运行在一个 hadoop 集群上

  下面从一个统计文本单词数量的结构来了解MapReduce

  这些数据经过以下几个阶段

  输入拆分:

  输入到MapReduce工作被划分成固定大小的块叫做 input splits ,输入折分是由单个映射消费输入块。

  映射 - Mapping

  这是在 map-reduce 程序执行的第一个阶段。在这个阶段中的每个分割的数据被传递给映射函数来产生输出值。在我们的例子中,映射阶段的任务是计算输入分割出现每个单词的数量(更多详细信息有关输入分割在下面给出)并编制以某一形式列表<单词,出现频率>

  重排 Shuffling

  这个阶段消耗映射阶段的输出。它的任务是合并映射阶段输出的相关记录。在我们的例子,同样的词汇以及它们各自出现频率。

  Reducing

  在这一阶段,从重排阶段输出值汇总。这个阶段结合来自重排阶段值,并返回一个输出值。总之,这一阶段汇总了完整的数据集。

  在我们的例子中,这个阶段汇总来自重排阶段的值,计算每个单词出现次数的总和。

  6 文本挖掘

  常用的文本挖掘方法包括:全文检索,中文分词,句法分析,文本分类,文本聚类,关键词提取,文本摘要,信息提取,智能问答。

搜索系统—搜索引擎的原理,架构与细节

1、全网搜索引擎架构与流程

这里写图片描述

全网搜索引擎的宏观架构如上图,核心系统主要分为三部分(粉色部分):

  1. spider爬虫系统;
  2. search&index建立索引与查询索引系统,这个系统又主要分为两部分:

    • 一部分用于生成索引数据build_index;
    • 一部分用于查询索引数据search_index。 
       
  3. rank打分排序系统。 
     

核心数据主要分为两部分(紫色部分):

  1. web网页库;
  2. index索引数据。



全网搜索引擎的业务特点决定了,这是一个“写入”和“检索”完全分离的系统:

【写入】 
系统组成:由spider与search&index两个系统完成 
输入:站长们生成的互联网网页 
输出:正排倒排索引数据

流程:如架构图中的1,2,3,4

  1. spider把互联网网页抓过来;
  2. spider把互联网网页存储到网页库中(这个对存储的要求很高,要存储几乎整个“万维网”的镜像);
  3. build_index从网页库中读取数据,完成分词;
  4. build_index生成倒排索引。



【检索】 
系统组成:由search&index与rank两个系统完成 
输入:用户的搜索词 
输出:排好序的第一页检索结果

流程:如架构图中的a,b,c,d

  1. search_index获得用户的搜索词,完成分词;
  2. search_index查询倒排索引,获得“字符匹配”网页,这是初筛的结果;
  3. rank对初筛的结果进行打分排序;
  4. rank对排序后的第一页结果返回。

2、站内搜索引擎架构与流程

做全网搜索的公司毕竟是少数,绝大部分公司要实现的其实只是一个站内搜索,站内搜索引擎的宏观架构和全网搜索引擎的宏观架构有什么异同?

以58同城100亿帖子的搜索为例,站内搜索系统架构长啥样?站内搜索流程是怎么样的?

这里写图片描述

站内搜索引擎的宏观架构如上图,与全网搜索引擎的宏观架构相比,差异只有写入的地方:

  1. 全网搜索需要spider要被动去抓取数据;
  2. 站内搜索是内部系统生成的数据,例如“发布系统”会将生成的帖子主动推给build_data系统。

看似“很小”的差异,架构实现上难度却差很多:全网搜索如何“实时”发现“全量”的网页是非常困难的,而站内搜索容易实时得到全部数据。



对于spider、search&index、rank三个系统:

  1. spider和search&index是相对独立的系统;
  2. rank是和业务、策略紧密、算法相关的系统,搜索体验的差异主要在此,而业务、策略的优化是需要时间积累的,这里的启示是:

    • Google的体验比Baidu好,根本在于前者rank牛逼;
    • 国内互联网公司(例如360)短时间要搞一个体验超越Baidu的搜索引擎,是很难的,真心需要时间的积累。

3、搜索原理与核心数据结构

3.1、什么是正排索引(forward index)?

由key查询实体的过程,是正排索引。

用户表:t_user(uid, name, passwd, age, sex),由uid查询整行的过程,就是正排索引查询。 
网页库:t_web_page(url, page_content),由url查询整个网页的过程,也是正排索引查询。

网页内容分词后,page_content会对应一个分词后的集合list<item>。 
简易的,正排索引可以理解为Map<url, list<item>>,能够由网页快速(时间复杂度O(1))找到内容的一个数据结构。

3.2、什么是倒排索引(inverted index)?

由item查询key的过程,是倒排索引。

对于网页搜索,倒排索引可以理解为Map<item, list<url>>,能够由查询词快速(时间复杂度O(1))找到包含这个查询词的网页的数据结构。


举个例子,假设有3个网页:

  • url1 -> “我爱北京”
  • url2 -> “我爱到家”
  • url3 -> “到家美好”

这是一个正排索引Map<url, page_content>。

分词之后:

  • url1 -> {我,爱,北京}
  • url2 -> {我,爱,到家}
  • url3 -> {到家,美好}

这是一个分词后的正排索引Map<url, list<item>>。

分词后倒排索引:

  • 我 -> {url1, url2}
  • 爱 -> {url1, url2}
  • 北京 -> {url1}
  • 到家 -> {url2, url3}
  • 美好 -> {url3}

由检索词item快速找到包含这个查询词的网页Map<item, list<url>>就是倒排索引。


正排索引和倒排索引是spider和build_index系统提前建立好的数据结构,为什么要使用这两种数据结构,是因为它能够快速的实现“用户网页检索”需求(业务需求决定架构实现)。

3.3、搜索的过程是什么样的?

假设搜索词是“我爱”,用户会得到什么网页呢?

  1. 分词,“我爱”会分词为{我,爱},时间复杂度为O(1);
  2. 每个分词后的item,从倒排索引查询包含这个item的网页list<url>,时间复杂度也是O(1):

    • 我 -> {url1, url2}
    • 爱 -> {url1, url2}
  3. 求list<url>的交集,就是符合所有查询词的结果网页,对于这个例子,{url1, url2}就是最终的查询结果.

看似到这里就结束了,其实不然,分词和倒排查询时间复杂度都是O(1),整个搜索的时间复杂度取决于“求list<url>的交集”,问题转化为了求两个集合交集。

字符型的url不利于存储与计算,一般来说每个url会有一个数值型的url_id来标识,后文为了方便描述,list<url>统一用list<url_id>替代。

4、list1和list2,求交集怎么求?

4.1、方案一:for * for,土办法,时间复杂度O(n*n)

每个搜索词命中的网页是很多的,O(n*n)的复杂度是明显不能接受的。倒排索引是在创建之初可以进行排序预处理,问题转化成两个有序的list求交集,就方便多了。

4.2、方案二:有序list求交集,拉链法

这里写图片描述

有序集合1{1,3,5,7,8,9} 
有序集合2{2,3,4,5,6,7}

两个指针指向首元素,比较元素的大小:

  1. 如果相同,放入结果集,随意移动一个指针;
  2. 否则,移动值较小的一个指针,直到队尾。

这种方法的好处是:

  1. 集合中的元素最多被比较一次,时间复杂度为O(n);
  2. 多个有序集合可以同时进行,这适用于多个分词的item求url_id交集。

这个方法就像一条拉链的两边齿轮,一一比对就像拉链,故称为拉链法。

4.3、方案三:分桶并行优化

数据量大时,url_id分桶水平切分+并行运算是一种常见的优化方法,如果能将list1<url_id>和list2<url_id>分成若干个桶区间,每个区间利用多线程并行求交集,各个线程结果集的并集,作为最终的结果集,能够大大的减少执行时间。


举例:

  • 有序集合1{1,3,5,7,8,9, 10,30,50,70,80,90}
  • 有序集合2{2,3,4,5,6,7, 20,30,40,50,60,70}

求交集,先进行分桶拆分:

  • 桶1的范围为[1, 9]
  • 桶2的范围为[10, 100]
  • 桶3的范围为[101, max_int]

于是:

  1. 集合1就拆分成

    • 集合a{1,3,5,7,8,9}
    • 集合b{10,30,50,70,80,90}
    • 集合c{}
  2. 集合2就拆分成

    • 集合d{2,3,4,5,6,7}
    • 集合e{20,30,40,50,60,70}
    • 集合e{}

每个桶内的数据量大大降低了,并且每个桶内没有重复元素,可以利用多线程并行计算:

  • 桶1内的集合a和集合d的交集是x{3,5,7}
  • 桶2内的集合b和集合e的交集是y{30, 50, 70}
  • 桶3内的集合c和集合d的交集是z{}

最终,集合1和集合2的交集,是x与y与z的并集,即集合{3,5,7,30,50,70}


4.4、方案四:bitmap再次优化

数据进行了水平分桶拆分之后,每个桶内的数据一定处于一个范围之内,如果集合符合这个特点,就可以使用bitmap来表示集合

这里写图片描述

如上图,假设set1{1,3,5,7,8,9}和set2{2,3,4,5,6,7}的所有元素都在桶值[1, 16]的范围之内,可以用16个bit来描述这两个集合,原集合中的元素x,在这个16bitmap中的第x个bit为1,此时两个bitmap求交集,只需要将两个bitmap进行“与”操作,结果集bitmap的3,5,7位是1,表明原集合的交集为{3,5,7}

水平分桶,bitmap优化之后,能极大提高求交集的效率,但时间复杂度仍旧是O(n) 
bitmap需要大量连续空间,占用内存较大。

4.5、方案五:跳表skiplist

有序链表集合求交集,跳表是最常用的数据结构,它可以将有序集合求交集的复杂度由O(n)降至O(log(n))

这里写图片描述

集合1{1,2,3,4,20,21,22,23,50,60,70} 
集合2{50,70}

要求交集,如果用拉链法,会发现1,2,3,4,20,21,22,23都要被无效遍历一次,每个元素都要被比对,时间复杂度为O(n),能不能每次比对“跳过一些元素”呢?

跳表就出现了:

这里写图片描述

集合1{1,2,3,4,20,21,22,23,50,60,70}建立跳表时,一级只有{1,20,50}三个元素,二级与普通链表相同 
集合2{50,70}由于元素较少,只建立了一级普通链表

如此这般,在实施“拉链”求交集的过程中,set1的指针能够由1跳到20再跳到50,中间能够跳过很多元素,无需进行一一比对,跳表求交集的时间复杂度近似O(log(n)),这是搜索引擎中常见的算法。

5、总结

文字很多,有宏观,有细节,对于大部分不是专门研究搜索引擎的同学,记住以下几点即可:

  1. 全网搜索引擎系统由spider, search&index, rank三个子系统构成;

  2. 站内搜索引擎与全网搜索引擎的差异在于,少了一个spider子系统;

  3. spider和search&index系统是两个工程系统,rank系统的优化却需要长时间的调优和积累;

  4. 正排索引(forward index)是由网页url_id快速找到分词后网页内容list<item>的过程;

  5. 倒排索引(inverted index)是由分词item快速寻找包含这个分词的网页list<url_id>的过程;

  6. 用户检索的过程,是先分词,再找到每个item对应的list<url_id>,最后进行集合求交集的过程;

  7. 有序集合求交集的方法有

    • 二重for循环法,时间复杂度O(n*n);
    • 拉链法,时间复杂度O(n);
    • 水平分桶,多线程并行;
    • bitmap,大大提高运算并行度,时间复杂度O(n);
    • 跳表,时间复杂度为O(log(n))。

谈一谈“搜索引擎故事”(原理篇)

  很多人都觉得引擎很神秘,其实是有些人不具备引擎思维,另外就是所在的层级不足以把一些事情的真相去看破,那我们从引擎和淘宝思维入手去谈一谈引擎到底是什么样的。

  其实,引擎在知道原理时,你会觉得它乖顺的像只猫,但是脾气不太好,有时候闹起小脾气挺高冷的,一般情况下还是挺粘人的,从淘宝角度去看,淘宝本身是一个商业性的网站,它本身也是一个互联网公司,像百度啊,谷歌啊,163这种企业。

  其实每天都在说淘宝有都少流量,有多少的流量池,这个说法并不是很准确,也是这个说法让很多人想偏了。其实淘宝拥有的是很多很多的展现量,就好像我们在线下经常看到的一些广告,在报纸上打在某某市的黄金商段,每天作用十万级别的客流,但是如果真有一个实体店,每天拿到十万客流就会挤破门窗,发生踩踏,所以这种广告是不切和实际的,就像淘宝,她每天拥有几千万次展现量或曝光量,并不是客流量。那么这种所谓展现和曝光的几率一定会通过某一种动作转化为流量,这个动作严格来讲就是点击,只有在曝光之后产生了点击,我们才能看到各个店铺产生的所谓的UV,包括淘宝,淘宝经常在外边投入广告,在双11,双12期间,大家上网能看到,几乎所有的地方都有淘宝的广告。

  淘宝也是这样,拥有的是展现量,大家对双十一不感兴趣,双十一照样没有流量池,所以淘宝真正的思维,第一个就是如何能把展现量做成变现呢,如何把展现量换成钱呢,所以大家能感觉到淘宝上有很重要的业务,就是按每千次的展现去收费的钻展,CPM一个M我们去竞价,通过CTR 系统去得到我们每一个M要花多少钱,这是淘宝最便捷的一个变现渠道,可是从所有的网站来看,包括百度和谷歌,这种CPM广告是最不受大家欢迎的,因为大家不接受这个产品,我们觉得我们也没办法去接受,第一,你说给我一万个展现量,实际真的给了吗?第二,一万的展现量能给我带来多大的流量呢?这是未知的啊。所以淘宝就做了一个很无奈的事情,就忍痛割爱的把所谓的展现量的收费变成了按点击收费CPC直通车,在大家的底层思维观念里帮你们做了一个价值观的转换,一个流量是多少钱。其实他转换完成之后,雅虎的思想,转换完成之后,收费反倒是贵,因为有CTR 系统的存在,就是这种叫实时竞价排名的系统,其实大家能感觉的到,直通车帮助淘宝赚了很多很多的钱,就是因为他用了底层的一个观点,就是从展现量转化成流量直接卖给大家流量,就像大枣,大家都知道多少钱,核桃大家也知道,但是呢,大枣加核桃应该是多少钱呢?很多人就不知道,那么产品刚出来的时候确实能圈走很多的钱嘛。从这也能看到引擎的原理也无非就是把展现量转换成流量的这样的一个原理 。

  那么传统引擎最开始的时候,也就是雅虎刚售货的初期,传统的引擎就是消费者搜什么,我尽可能去给你展现出来,让消费者自己去挑选。那么现在的引擎是谁在搜什么样的词,谁是这个产品的受众,我才能展现给谁去看,因为千人千面嘛。那引擎也会去往更深的点上去进化。比如说谁是否经常搜这样的词,是否是这样的人群,然后他对于我的展现做了一些什么样的行为,导致我决定这个产品给不给你看,那从这些点上来看呢,其实引擎考核的无非就是这样几个元素,第一个,展现量能给你匹配到多少,展现量给你之后,展现得回馈呢个回馈什么样的数据。那么展现的回馈是什么呢?是点击率,那么产生点击率之后,马上要考核点击的回馈。点击回馈最重要的一个因素,就是转化率,转化之后还要考核转化回馈。

百度搜索引擎的工作原理:抓取,索引和排名

  你知道像百度这样的搜索引擎如何发现,抓取和排列数以万亿计的网页,以便提供搜索结果吗?

  尽管搜索引擎的整体工作原理较为复杂,但我嘛可以理解一些非技术性的东西,如抓取,索引和排名,以便我嘛更好地理解搜索引擎优化策略背后的方法。

  据统计网络上页面结果超过130万亿个。实际上,可能远远超过这个数字,有很多页面因为各种原因被百度排除在抓取,索引和排名过程之外。

  为了保持搜索结果尽可能的与用户搜索相关,像百度这样的搜索引擎有一个明确定义的流程,即用于为任何给定的搜索查询确定最佳网页,这个过程随着时间的推移而变化,因为它可以使搜索结果更好。

  基本上,我们试图回答这个问题:“百度如何确定以及排序搜索结果?”。简而言之,这个过程包含以下步骤:

  1.抓取 – 发现网络上页面并抓取;

  2.索引 – 存储所有检索到的页面的信息供日后检索;

  3.排名 – 确定每个页面的内容,以及应该如何对相关查询进行排名;

  让我们仔细看看更简单的解释…

  抓取

  搜索引擎具有专门的抓取工具(又名蜘蛛),可以“爬行”万维网来发现存在的页面,以帮助确定最佳网页,以便对查询进行评估,爬虫旅行的方式是网站链接。网站链接将整个网站上的页面链接在一起,这样做为抓取工具创建了一条通往存在的万亿互联网页的途径。

百度蜘蛛

  每当爬虫查看网页时,他们都会查看页面的“文档对象模型”(或“DOM”),以查看其中的内容。DOM页面呈现HTML和Javascript代码,爬虫可以通过它查找其他页面的链接,这允许搜索引擎发现网页上的新页面,并且找到每个新链接都会加载到该爬虫将在稍后访问的队列中。

  如前所述,像百度这样的搜索引擎不会抓取每一个网页,相反,他们从一组可信的网站开始,这些网站是确定其他网站如何衡量的基础,并且通过跟踪他们在他们访问的网页上看到的链接,扩展了他们在网络上的抓取。

  相关阅读:百度蜘蛛优化教程

  索引

  索引是将关于网页的信息添加到搜索引擎索引中的行为,索引是一组网页 – 一个数据库 – 包含搜索引擎蜘蛛爬取页面的信息。

  索引目录和组织:

  ·每个网页内容的性质和主题相关性的详细数据;

  ·每个页面链接到的所有页面的地图;

  ·任何链接的可点击(锚点)文字;

  ·有关链接的其他信息,例如它们是否是广告,它们位于页面上的位置以及链接上下文的其他方面,以及关于接收链接的页面的含义… 和更多。

  索引是当用户在搜索引擎中输入查询时,百度等搜索引擎存储和检索数据的数据库决定从索引中显示哪些网页并按照什么顺序显示之前,搜索引擎会应用算法来帮助排列这些网页。

  排名

  为了向搜索引擎的用户提供搜索结果,搜索引擎必须执行一些关键步骤:

  1.解释用户查询的意图;

  2.识别与查询相关的索引中的网页;

  3.按相关性和重要性排序并返回这些网页;

  这是搜索引擎优化的主要领域之一,有效的SEO有助于影响这些网页对相关查询的相关性和重要性。

  那么,相关性和重要性意味着什么?

  ·相关性:网页上的内容与搜索者的意图相匹配的程度(意图是搜索者试图完成搜索的目的,这对于搜索引擎(或SEO)来说是一个不小的任务)。

  ·重要性:他们在别处引用的越多,网页被认为越重要(将这些引用视为该网页的信任投票)。传统上,这是从其他网站链接到该网页的形式,但也可能有其他因素发挥作用。

  为了完成分配相关性和重要性的任务,搜索引擎具有复杂的算法,旨在考虑数百个信号  ,以帮助确定任何给定网页的相关性和重要性。

  这些算法通常会随着搜索引擎的工作而改变,以改善他们向用户提供最佳结果的方法。

  虽然我们可能永远不会知道百度等搜索引擎在其算法中使用的完整信号列表(这是一个严密保密的秘密,并且有充分的理由,以免某些不道德者使用其来对系统进行排名),但搜索引擎已经揭示了一些通过与网络出版社区共享知识的基础知识,我们可以使用这些知识来创建持久的SEO策略。

  搜索引擎如何评估内容?

  作为排名过程的一部分,搜索引擎需要理解它所搜索的每个网页内容的性质,事实上,百度对网页内容作为排名信号很重视。

  在2016年,百度证实了我们许多人已经相信的内容:内容是网页排名前三位的因素之一。

  为了理解网页的内容,搜索引擎分析出现在网页上的词语和短语,然后建立一个称为“语义地图”的数据地图,这有助于定义网络上的概念之间的关系页。

  您可能想知道网页上的“内容”实际上是什么,独特的页面内容由页面标题和正文内容组成。在这里,导航链接通常不在这个等式中,这并不是说它们并不重要,但在这种情况下,它们不被视为页面上的独特内容。

  搜索引擎可以在网页上“查看”什么样的内容?

  为了评估内容,搜索引擎在网页上找到的数据以解释理解它,由于搜索引擎是软件程序,他们“看到”网页的方式与我们看到的截然不同。

  搜索引擎爬虫以DOM的形式查看网页(如我们上面定义的那样)。作为一个人,如果你想看看搜索引擎看到什么,你可以做的一件事就是看看页面的源代码,要做到这一点,您可以通过右键单击浏览器中并查看源代码。

源代码

源代码

  这和DOM之间的区别在于我们没有看到Javascript执行的效果,但作为一个人,我们仍然可以使用它来了解很多关于页面内容的内容,网页上的正文内容通常可以在源代码中找到,以下是HTML代码中以上网页上的一些独特内容的示例:

  除了网页上的独特内容之外,搜索引擎抓取工具还会在网页上添加其他元素,帮助搜索引擎了解该网页的内容。

  这包括如下内容:

  ·网页的元数据,包括HTML代码中的标题标签和元描述标签,这些标签用作搜索结果中网页的标题和说明,并应由网站所有者维护。

  ·网页上图像的alt属性,这些是网站所有者应该保留的描述,以描述图像的内容。由于搜索引擎无法“看见”图像,这有助于他们更好地理解网页上的内容,并且对于那些使用屏幕阅读程序来描述网页内容的残障人士也起着重要作用。

  我们已经提到了图片,以及alt属性如何帮助爬虫了解这些图片的内容,搜索引擎无法看到的其他元素包括:

  Flash文件:百度曾表示可以从Adobe Flash文件中提取一些信息,但这很难,因为Flash是一种图片媒介,当设计人员使用Flash来设计网站时,他们通常不会插入有助于解释文件内容的文本,许多设计人员已将HTML5作为Adobe Flash的替代品,这对搜索引擎友好。

  音频和视频:就像图像一样,搜索引擎很难理解没有上下文的音频或视频。例如,搜索引擎可以在Mp3文件中的ID3标签中提取有限的数据,这是许多出版商将音频和视频与成绩单一起放在网页上以帮助搜索引擎提供更多背景的原因之一。

  程序中包含的内容:这包括AJAX和其他形式的JavaScript方法,动态加载网页上的内容。

  iframe:iframe标记通常用于将自己网站上的其他内容嵌入到当前网页中,或者将来自其他网站的内容嵌入到您的网页中百度可能不会将此内容视为您的网页的一部分,尤其是当它来自第三方网站时。从历史上看,百度忽略了iframe中的内容,但可能有些情况是该通用规则的例外情况。

  结论

  在SEO面前,搜索引擎显得如此简单:在搜索框中输入查询,然后poof!显示你的结果。但是,这种即时展现是由幕后的一组复杂过程支持的,这有助于为用户搜索识别最相关的数据,因此搜索引擎可以寻找食谱,研究产品或其他奇奇怪怪不可描述的事情。

搜索引擎的基本工作原理

  1.搜索引擎的概念

  在浩瀚的网络资源中,搜素引擎(Search Engine)是一种网上信息检索工具,它能帮助用户迅速而全面地找到所需要的信息。我们这样对搜索引擎进行定义:搜索引擎是一种能够通过因特网接受用户的查询命令,并向用户提供符合其查询要求的信息资源网址的系统。据统计,搜索引擎搜索仅次于电子邮件的应用。目前网上比较有影响的中文搜索工具有:google、百度、北大天网、爱问(iask)、雅虎(yahoo!)、搜狗(sogou)、搜搜(soso)等搜索引擎。英文的有:Yahoo! 、AltaVista、Excite、Infoseek、Lycos、Aol等。另外还有专用搜索引擎,例如专门搜索歌曲和音乐的;专门搜索电子邮件地址、电话与地址及公众信息的;专门搜索各种文件的FTP搜索引擎等。

  搜索引擎是指根据一定的策略,运用特定的计算机程序搜集互联网上的信息,在对信息进行组织和处理后,为用户提供检索服务的系统。搜索引擎并不是真正的互联网,它搜索的实际上是预先整理好的网页索引数据库。真正意义上的搜索引擎,通常指的是收集了互联网上几千万到几十亿个网页并对我那个也中的每一个词(即关键词)进行索引。建立索引数据库的全文搜索引擎。现在的搜索引擎已普遍使用超链分析技术,除了分析索引网页本身的内容,还分析索引所有指向该网页的链接的URL、Anchor、Text,甚至链接周围的文字。所以,有时候,即使某个网页A中并没有出现某个词,比如

  “信息检索”,但如果有网页B用链接“信息检索”指向这个网页A,那么用户搜索“信息检索”时也能找到网页A。而且,如果有越多的网页的“信息检索”链接指向网页A,那么网页A在用户搜索“信息检索”时也会被认为更相关,排序也会越靠前。

  搜索引擎的原理,可以分为四步:从互联网上抓取网页、建立索引数据库、在索引数据库中搜索排序、对搜索结果进行处理和排序。

  (1)、从互联网上抓取网页:利用能够从互联网上自动收集网页的蜘蛛系统程序,自动访问互联网,并沿着任何网页中所有URL爬到其他网页,重复这个过程,并把爬过的所有网页收集回来。

  (2)、建立索引数据库:由分析索引系统程序对收集回来的网页进行分析,提取相关网页信息(包括网页所在URL、编码类型、页面内容包含的关键词、关键词位置、生成时间、大小、与其他网页的链接关系等),并根据一定的相关度算法进行大量的复杂计算,得到每一个网页针对页面内容中及超链中每一个关键词的相关度(或重要性),然后利用这些相关信息建立网页索引数据库。

  (3)、在索引数据库中搜索排序:当用户输入关键词后,由搜索系统程序从网页索引数据库中找到符合该关键词的所有相关网页。因为所用相关网页针对该关键词的相关度早已计算好,所以只需按照现成的相关数值排序,相关度越高,排名越靠前。最后由页面生成系统将搜索结果的链接地址和页面内容摘要等内容组织起来返回给用户。

  (4)、对搜索结果进行处理排序:所有相关网页针对该关键词的相关信息在索引库中都有记录,只需综合相关信息和网页级别形成相关数值度,然后进行排序,相关度越高,排名越靠前。最后由页面生成系统将搜索结果的链接地址和页面内容摘要等内容组织起来返回给用户。

  搜索引擎的分类

  搜索引擎的技术基础是全文检索技术。全文检索通常指文本全文检索,包括信息的储存、组织、表现、查询、存取等各个方面,其核心为文本信息的索引和检索,一般用于企事业单位。随着互联网信息的发展,搜索引擎在全文检索技术上逐渐发展起来,并得到广泛的应用,但搜索引擎还是不同于全文检索。搜索引擎和常规意义上的全文检索主要区别有以下几点。

  (1)、数据量。

  传统全文检索系统面向的是企业本身的数据或者和企业相关的数据,一般索引数据库的规模多在GB级,数据量大的也只有几百万条;但互联网网页搜索需要处理几十亿的网页,搜索引擎的策略都是采用服务器群集和分布式据算技术。

  (2)、内容相关性。

  信息太多,差准和排序就是特别重要,Google等搜索引擎采用网页链接分析技术,根据互联网上网页被链接的次数作为重要性评判的依据;但全文检索的数据源中相互链接的程度并不高,不能作为判别重要性的依据,只能基于内容的相关性排序。

  (3)、安全性。

  互联网信息是公开的,除了文本内容外,其他信息都不太重要;而企业全文检索的数据源都是企业内部的信息,有等级、权限等限制,对查询方式也有更严格的要求,因此其数据一般会安全和集中地存放在数据库仓库中以保证数据安全和管理的要求。

  (4)、个性化和智能化。

  搜索引擎面向的是互联网的访问者,由于其数据量和客户数量的限制,自然语言处理技术、知识检索、知识挖掘等计算密集的智能计算技术很难应用,这也是目前搜索引擎技术努力的方向。而全文检索数据量小,检索需求明确,客户量少,在智能化和个性上更具有优势。

  除了与全文检索系统有上述区别之外,搜索引擎按其工作方式主要可以分为3种,分别是全文搜索引擎(Full Text Search Engine)、目录索引类(Search Index/Directory)和元搜索引擎(Meta Search Engine)。

  一、全文搜索引擎。

  全文搜索引擎是名副其实的搜索引擎(google、AllTheWeb、AltaVista、Inktomi、Teoma、WiseNut、百度、中文搜索、北大天网等),他们都是通过从互联网上提取的各个网站的信息(以网页文字为主)而建立的数据库中,检索与用户查询条件匹配的相关记录,然后按一定的排列顺序将结果返回给用户,因此它们是真正的的搜索引擎。从搜索结果来源的角度,全文搜索引擎又可以细分为两种:一种是拥有自己的检索程序,俗称机器人程序或蜘蛛程序,并自建网页数据库,搜索结果直接从自身的数据库中调用,如上面提到的搜索引擎;另一种则是租用其他引擎的数据库,并按自定的格式排列搜索结果,如Lycos引擎。

  全文搜索引擎有全文搜索、检索功能强、信息更新速度快等优点。但同时也有其不足之处,提供的信息虽然多而全,但可供选择的信息太多反而降低相应的命中率,并且提供的查询结果重复链接较多,层次结构不清晰,给人一种繁多杂乱的感觉。

  二、目录索引类搜索引擎。

  目录索引虽然有搜索功能,但在严格意义上算不上是真正的搜索引擎,仅仅是按目录分类的网站链接列表而已。用户完全可以不用进行关键词(keywords)查询,仅靠分类目录也可找到需要的信息。目录索引中最具代表性的莫过于大名鼎鼎的Yahoo!,其他的还有Open Directory Project(DMOZ)、LookSmart、About等。国内的搜狐、新浪、网易搜索也都属于这一类。

  目录索引与全文搜索引擎的区别在于它是由人工建立的,通过“人工方式”将站点进行了分类,不像全文搜索引擎那样,将网站上的所有文中和信息都收录进去,而是首先将该网站划分到某个分类下,再记录一些摘要信息,对该网站进行概述性的简要介绍,用户提出搜索要求时,搜索引擎只在网站的简介中搜索。它的主要优点有:层次、结构清晰、易于查找;多级类目,便于查询到具体明确的主题;在内容提要、分类目录下有简明扼要的内容,方便使用户一目了然。其缺点是搜索范围较小、更新速度慢、查询交叉类目时容易遗漏。

  三、元搜索引擎。

  元搜索引擎在接受用户查询请求时,同时在其他多个搜索引擎上进行搜索,并将结果返回给用户。著名的元搜索引擎有InfoSpace、 Dogpile、Vivisimo等,中文元搜索引擎中具代表性的有北斗搜索。在搜索结果排列方面,有的直接按来源搜索引擎排列搜索结果,如 Dogpile,有的则按自定的规则将结果重新排列组合,如Vivisimo。

  除上述三大类搜索引擎外,还有以下集中非主流形式。

  (1)、集合式搜索引擎:如HotBot在2002年底推出的引擎。该搜索引擎类似于元搜索引擎,但区别在于不是同时调用多个搜索引擎,而是由用户从提供的4个引擎之中选择,因此他叫集合式搜索引擎更确切些。

  (2)、门户搜索引擎:如Aol Search、Msn Search等虽然提供搜索服务,但自身既没有分类目录也没有网页数据库,其搜索结果完全来自于其他引擎。

  (3)、免费链接目录(Free For ALL links,FFA):这类网站一般只简单地的滚动排列链接条目,少部分有简单的分类目录,不过规模比起Yahoo!等目录索引要小得多。

  除了上面的分类,搜索引擎还应具有以下功能:

  A、网页搜索功能

  B、网站搜索功能

  C、图片搜索功能

  D、新闻搜索功能

  E、字典搜索功能

  F、功能搜索功能

  搜索引擎的关键技术

  1、信息收集和存储技术。

  网上信息收集和存储一般分为人工和自动两种方式。

  人工方式采用传统信息收集、分类、存储、组织和检索的方法。研究人员对网站进行调查、筛选、分类、存储。由专业人员手工建立关键字索引,再将索引信息存入计算机相应的数据库中。

  自动方式通常是由网络机器人来完成的。“网络机器人”是一种自动运行的软件,其功能是搜索因特网上的网站和网页。这种软件定期在因特网上漫游,通过网页间链接顺序地搜索新的地址,当遇到新的网页的时,就给该网页上的某些字或全部字做上索引并把它们加入到搜索引擎的数据库中,由此搜索引擎的数据库得以定期更新。

  一般来说,人工方式收集信息的准确性要远优于“网络机器人”,但其收集信息的效率及全面性低于“网络机器人”。

  2、信息预处理技术。

  信息预处理包括信息格式支持与转换及信息过滤。目前因特网上的信息发布格式多种多样,这就要求搜索引擎支持多种文件格式。从实际情况来看,所有的搜索引擎都支持HTML格式,而对于其他文件格式的支持则不同的搜索引擎有不同的规定,最多的能支持200多种文件格式。一般地说,一个企业级的公用Web站点起码应该支持40~60种文件格式。同时搜索引擎还应具备信息格式转换功能,以保证不同格式的数据数据均能在网络流通。信息过滤也是搜索引擎的一项重要技术。在因特网中,存在大量的无用信息,一个好的搜索引擎应当尽量减少垃圾站点的数量,这是信息过滤要着重解决的问题。

  3、信息索引技术。

  信息索引就是创建文档信息的特征记录,以使用户能够快速地检索到所需信息。建立索引主要涉及以下几个问题。

  (1)、信息语词切分和语词词法分析:语词是信息表达的最小单位,由于语词切分中存在切分歧义,切分需要充分利用各种上下文知识。语词词法分析是指识别出各个语词的词干,以便根据词干建立信息索引。

  (2)、进行词性标注及相关的自然语言处理:词性标注是指利用基于规则和统计(马尔科夫链)的科学方法对语词进行标注,基于马尔科夫链随即过程的n元语法统计分析方法在词性标注中能达到较高的精度。可利用多种语法规则识别出重要的短语结构。自然语言处理是运用计算机对自然语言进行分析和理解,从而使计算机在某种程度上具有人的语言能力。将自然语言处理应用在信息检索中,可以提高信息检索的精度和相关性。

  (3)、建立检索项索引:使用倒排文件的方式建立检索项索引,一般包括“检索项”、“检索项所在文件位置信息”以及“检索项权重”。

  (4)、检索结果处理技术:搜索引擎的检索结果通常包含大量文件,用户不可能一一浏览。搜索引擎一般应按与查询的相关程度对检索结果进行排列,最相关的文件通常放在最前面。搜索引擎确定相关性的方法有概率方法、位置方法、摘要方法、分类或聚类方法等。

  a、概率方法:根据关键词在文中出现的频率来判定文件的相关性。这种方法对关键词出现的次数进行统计,关键词出现的次数越多,该文件与查询的相关程度就越高。

  b、位置方法:根据关键词在文中出现的位置来判定文件的相关性。关键词在文件中出现的越早,文件的相关程度就越高。

  c、摘要方法:搜索引擎自动地为每个文件生成一份摘要,让用户自己判断结果的相关性

  ,以使用户进行选择。

  d、分类或聚类方法:搜索引擎采用分类或聚类技术,自动把查询结果归入到不同的类别中。

  搜索引擎的体系结构

  搜索引擎是指以一定的策略搜集互联网上的信息,在对信息进行组织和处理后,为用户提供检索服务的系统。

  搜索引擎主要由搜索器、索引器、检索器和用户接口构成。

  一、搜索器。

  A、网络蜘蛛:搜索引擎系统结构的搜索器(Spider)俗称网络蜘蛛或网络爬虫,十亿个自动收集网页的系统程序,其功能是日夜不停地在互联网中漫游,搜集信息。它要尽可能多、尽可能快地搜集各种类型的新信息,还要定期更新已经搜索过的旧信息,以避免出现死链接。目前有两种搜集信息的策略:

  a、从一个其实URL开始,顺着这些URL中的超链接(Hyperlink),以宽度优先、深度优先或启发式方式循环在互联网中发现信息。起始URL使一些非常流行,包含很多链接的站点(如Yahoo!)。

  b、将Web空间按照域名、IP地址或国家划分,每个搜索器负责一个子空间的穷尽搜索。搜索器将搜索回来的每个文档过滤掉格式符,提取文本数据 Fulltext。每个文档对应着一个Fulltext文件,内容包括网页标题、网页URL、大小、时间、类型、分类等属性及文本内容,所有生成的这些文件交给索引器进行索引处理。搜索器的实现常用分布式并行计算技术,以提高信息发现和更新的速度。

  B、内容提取(文本文件)。

  对网页内容的提取,一直是网络蜘蛛重要的技术。整个系统一般采用插件的形式,通过一个插件管理服务程序,遇到不同格式的网页采用不同的插件机处理,搜索引擎建立索引、处理的对象是文本文件。

  C、定期更新策略。

  由于网站的内容经常在变化,因此网络蜘蛛也不断地更新其抓取网页的内容,这就需要网络蜘蛛按照一定的周期去扫描网站,查找哪些页面是需要更新的页面,哪些页面是新增页面,哪些页面是已经过期的死链接。

  二、索引器。

  索引器(Indexer)的功能是理解搜索器所搜索的信息,由分析索引系统程序对收集回来的网页进行分析,提取网页信息(包括网页所在URL、编码类型、页面内容包含的关键词、关键词位置、生成时间、大小、与其他网页的链接关系等),根据一定的相关度算法进行大量复杂计算,得到每一个网页针对页面内容中及超链接中每一个关键词的相关度(或重要性),然后这些相关信息建立网页索引数据库。

  索引器的工作过程为:索引器读入搜索器生成的Fulltext文件,采用基于位置倒排索引与三级n元索引相结合的索引机制。首先进行分词处理生成索引项,并作归类排序,生成Index文件和inv文件,inv文件为倒排表(Inversion List),即由索引项查找相对应的文档,Index文件形成分词-倒排表对应关系,内容为分词在倒排表中相应的文档块起始地址,含有该词的文档数量等信息。索引器可以使用集中式索引算法或分布式索引算法。当数据量很大时,必须实现即时索引,否则不能跟上信息量急剧增加的速度。索引算法对索引器的性能(如大规模峰值查询时的响应速度)有很大的影响。一个搜索引擎的有效性在很大程度上取决于索引器的质量。

  索引项有客观索引项和内容索引项两种:客观索引项与文档的语义内容无关,如作者名、URL、更新时间、编码、长度、链接流行度(Link Popularity)等;内容索引项是用来反映文档内容的,如关键词极其权重,短语、单字等。内容索引项可以分为单索引项和多索引项(短语索引项)两种。单索引项对于英文来讲是英语单词,比较容易提取,因为单词之间有天然的分隔符(空格);对于中文等连续书写的语言,必须进行词语的切分(分词)。

  词法分析是对自然语言的形态进行分析,判定词的结构、类别和性质的过程。对于以英文为代表的形态丰富的语言来说,英文的词法分析的一个重要的过程是形态分析,即将英文词还原成词干。而汉语形态变化很少,其主要的问题在于书写时词与词之间没有空格,所以通常中文词法分析的关键是分词,分词往往是后续进一步处理的基础。

  (1)、英语词法分析:英文的形态分析主要目标是将句子中的词从词性还原到词甚至词根。英文的形态分析常常也称为stemming,分析器称为 stemmer。形态分析常常采用基于自动机的规则方法,即将词形变化的规律总结成规则,然后通过自动机的方法对词形进行转换。转换的过程当中可以使用或者不使用词典。

  (2)、中文分词技术:基于机械匹配和机遇概率统计的分词方法。前者通过对已有词典的机械匹配来得到分词结果。后者不需要任何词典就可以得到粉刺结果,或者对粗切分结果进行基于概率统计后的处理来得到最终分词结果。

  中文分词技术面临的两个最大的问题是切分歧义和未定义词的问题。前者要解决在上下文环境下不同切分结果的选择;后者要解决词典中未收录词(如人名、地名、机构名等)的识别。可以在机械匹配的基础上通过规则的方法来求解上述两个问题。然而规则方法很难穷尽真实文本的各种现象。目前比较主流的方法是通过对真实文本的概率统计来求解切分歧义和未定义词问题。

  三、检索器。

  检索器(Searcher)的功能是针对用户的查询请求在索引库中快速检出文档,采用一定的信息检索模型进行文档与查询的相关度评价,对将要输出的结果进行排序、聚类等操作,并实现某用户相关性反馈机制。信息检索模型有以下几种:布尔逻辑模型、模糊逻辑模型、向量空间模型、概率模型及混合模型等。

  检索器的工作过程如下:检索器对用户接口(Uesr Interface, UI)提出的查询要求进行递归分析,在UI中一般采用基本语法来组织要检索的条件。检索器通常支持多种语法规则,如逻辑操作符AND、OR、NOT,使用 “+、-”连接号和通配符,使用逗号、括号或引号进行词组查找。对于每个索引项,匹配Index文件,查到倒排表(inv文件)中包含该索引项的文档,并对所有查找出的文档进行集合运算,将结果集按照基于内容和基于链接分析的方法进行相

  关度评价并排序,最大限度地保证检索出的结果与用户查询串有很高的相关性,将最终形成的有序的文档结果集合返回给用户。

  四、用户接口。

  用户接口(UI)的作用是输入用户查询,显示结果查询结果,提供用户相关性反馈机制。UI的主要目的是方便用户使用搜索引擎,高效率、多方式地从搜索引擎中得到有效、及时的信息。UI的实际和实现使用人机交互的理论和方法,以充分适应人类的思维习惯。

  用户输入接口可以分为简单接口和复杂接口两种。简单接口只提供用户输入查询串的文本框;复杂接口可以让用户对查询进行限制,如逻辑运算(与、或、+、-)、相近关系(相邻、near)、域名范围(如edu.com)、出现位置(如标题、内容)、信息时间、长度等。目前一些公司和机构正在考虑制定查询选项的标准。

  当互联网用户通过UI提交查询时,检索器程序根据用户输入的查询关键词,在已由索引器完成索引和初排序的存储桶(Barrel)中进行查找,并采用特定的页面优先度算法对其结果进行最终排序,使之尽可能符合用户查询需求。最后UI将最终查询结果呈现在互联网用户面前。

  搜索引擎的工作原理(一)

  搜索引擎的工作原理可以分为三步:从互联网上抓取网页、建立索引数据库、在索引数据库中搜索排序。

  (1)、从互联网上抓取网页,就是利用能够从互联网上自动收集网页的Spider系统程序,自动访问互联网,并沿着任何网页中的所有URL爬到其他网页,重复这个过程,并把爬过的所有网页收集回来。

  (2)、建立索引数据库,就是由分析索引系统程序对收集回来的网页进行分析,提取相关网页信息,根据一定的相关度算法进行大量复杂计算,得到每一个网页针对页面内容中及超链中每一个关键词的相关度或重要性,然后利用这些相关信息建立网页索引数据库。

  (3)、在索引数据库中搜索排序,就是当用户输入关键词搜索后,由搜索系统程序从网页索引数据库中找到符合该关键词的所有相关网页。因为所有相关网页针对该关键词的相关度早已算好,所以只需按照现成的相关度数值排序,相关度越高,网站排名越靠前。最后,由页面生成系统将搜索结果的链接地址和页面内容摘要等内容组织起来返回给用户。

  一、网页搜集。

  搜索引擎网页的搜集过程并不是在用户提交关键词后进行及时的搜索,而是预先将网页搜集好并进行相关处理之后等待用户的查询。我们知道,在网络比较畅通的情况下,从网上下载一篇网页大概需要1秒钟,因此如果用户在查询的时候即时去网上抓来成千上万的网页,一个个分析处理后再和用户的查询匹配,这样的查询时间就会很慢也不可能满足用户的需求。有可能多个用户重复抓取同一个页面,使系统的效益低下。面对大量的用户查询,不可能每来一个查询,系统就到网上“搜索” 一次。大规模的搜索引擎是将一批预先搜集好的网页进行管理和维护。如何维护?有两种基本的方法。

  A、定期搜索法:每次搜集替换上一次的内容,我们称之为“批量搜集”。由于每次都是重新来一次,对于大规模搜索引擎来说,每次搜索的时间都会花费几周的时间。这样的开销比较大,通常两次搜集的时间间隔也很长(如早期天网的版本大概每3个月搜索一次,google在一段时间曾是每隔28天搜索一次)。这种方法的好处是系统实现比较简单,缺点是实时性不高,还有重复搜集所带来的额外宽带的消耗。

  B、增量搜集法:最初时搜集好一批数据,以后只是新出现的网页和改变的网页并删除不再存在的网页。除了新闻网站外,许多网页的内容并不是经常变化的,这样一来每次搜集的网页量不会很大,于是可以经常去搜集。30万个网页,一台pc机,在一般的网络条件下,半天也就搜集完了。这样的系统表现出来的信息实时性就会比较高,主要缺点是系统实现比较复杂。

  在具体搜集过程中,如何抓取一篇篇的网页,可以有不同的考虑。最常见的是一种所谓“爬取”的过程,具体过程是:将Web上的网页集合看作十亿个有向图,搜集过程从给定的起始URL的集合S(或者说种子)开始,沿着网页中的链接,按照先深、先宽或者别的某种策略遍历,不停的从S中移除URL,下载相应的网页,解析出网页中的超链接URL,看是否已经被访问过,将未访问的那些URL加入集合S。整个过程可以形象地想象为一个蜘蛛(Spider)在蜘蛛网上(Web)上爬行。一个真正的系统其实是多个“蜘蛛”同时在爬。

  这种方法实现起来并不算困难,但需要注意的是在实现过程中通过一定的策略,使收集到的某些网页相对比较"重要"。我们知道任何搜索引擎是不可能将Web上网页搜集完全的,通常都是在某些条件的限制下来结束搜集的过程(如磁盘满,或者搜集时间已经太长了)。因此就有了一个尽量使搜到的网页比较重要的问题,这对于那些并不追求很大的数量覆盖率的搜索引擎特别重要。一般情况下按照先款搜索方式得到网页集合比先深搜索得到的集合重要。

  另外一种可能的方式是在第一次全面网页搜集后,系统维护相应的URL集合S,往后的搜集直接基于这个集合。每搜到一个网页,如果它发生变化并含有新的 URL,则将它们对应的网页也抓回来,并将这些新URL也放到集合S中;如果S中某个URL对应的网页不存在了,则将它从S中删除。这种方式也可以看成是一种极端的先款搜索,即第一层是一个很大的集合,往下最多只延伸一层。

  还有一种方法是让网站拥有者主动向搜索引擎提交他们的网址,系统在一定时间内向那些网站派出“蜘蛛”程序,扫描该网站的所有网页并将有关信息存入数据库中。大型商业搜索引擎一般都提供这种功能。

  搜索引擎的工作原理(二)

  互联网上大部分信息都是以HTML格式存在,对于索引来说,只处理文本信息。因此需要把网页中的文本内容提取出来,过滤掉一些脚本标识符和一些无用的广告信息,同时记录文本的版面格式信息。网页处理主要包括四个方面:关键词的提取、重复或转载网页的消除、链接分析和网页重要程度的计算。

  一、关键词的提取:由于HTML文档产生来源的多样性,许多网页在内容上比较随意,不仅文字不讲究规范、完整,而且还可能包含许多和主要内容无关的信息(如广告、导航条、版权说明等)。为了支持查询服务,需要从网页源文件中提取能够代表它的内容的一些特征—关键词。

  网页处理阶段的一个基本任务,就是要提取出网页源文件的内容部分所包含的关键词。对于中文来说,就是要根据一个词典,用一个“切词软件”,从网页文字中切出词典所含的词语来。这样一片网页就可以由一组词来近似代表了,p={t1、t2、t3、t4......tn}。一般来讲,可能得到很多的词,同一个词可能在一篇网页中多次出现。从效果和效率来考虑,不应该让所所有的词都出现在网页的表示中,要去掉诸如“的”、“在”等没有内容指示意义的词,称为 “停用词”(Stop Word)。这样,对一篇网页来说,有效的词语数量大约为200。

  二、重复或转载网页的消除:我们知道Web上的信息存在大量的重复现象。统计分析表明,网页的重复率平均大约为4。也就是说,当通过一个URL在网上看到一篇网页的时候,还有另外三个不同的URL也给出相同或者基本相似的内容。这种现象对于搜索引擎来说,它在搜集网页的时要消耗机器时间和网络宽带资源,而且如果在查询的结果中出现,将消耗查询者计算机的资源,也会引来用户的抱怨。因此,消除内容重复或主题重复的网页是网页处理阶段的一个重要任务。

  三、链接分析:从信息检索的角度讲,如果系统仅仅面对的是内容的文字,我们能依据关键词和关键词在文档中集合出现的频率来统计该词的相对重要性以及和某些内容的相关性。有了HTML标记后,情况可能进一步改善,例如,在同一篇HTML中,

  和

  之间的信息很可能就比在

  和

  之间的信息更重要。尤其HTML文档中所含的指向其他文档的链接信息是人们特别关注的的对象,认为它们不仅给出了网页之间的关系,而且还对判断网页的内容有很重要的作用。

  四、网页重要度的计算:搜索引擎返回给用户的,是一个和用户查询相关的结果列表。列表中条目的顺序是很重要的一个问题。不同的顺序到达的结果是不一样的,因此搜索引擎实际上追求的是一种统计意义上的满意。例如,人们认为利用google查询比较好,是因为在多数情况下google返回的内容更要符合用户的需要。

  如何对查询结果进行排序有很多因素需要考虑,如何理解一篇网页比另外一篇网页重要?人们参照科技文档重要性的评估方式,核心思想就是“被引用的最多的就是最好的”。“引用”这个概念恰好可以通过在网页之间的超链进行体现,作为google创立核心技术的Page-Rank就是这种思路的成功体现。除此以外,人们还注意到网页和文档的不同特点,即一些网页主要是大量的对外链接,其本身基本没有一个明确的主题内容,而另外有些网页则被大量的其他网页链接。从某种意义上讲,这形成了一种对偶的关系,这种关系可以使得人们在网页上建立另外一种重要性指标。这些指标有的可以在网页处理阶段计算,有的则要在查询阶段计算,但都是作为查询服务阶段最终形成结果排序的部分参数。

  搜索引擎的工作原理(三)

  为了完成查询服务,需要有相应的元素来进行表达,这些元素主要有:原始网页文档、URL和标题、编号、所含重要关键词的集合以及它们在文档中出现的位置信息、其他一些指标,如重要程度、代码等。

  用户通过搜索引擎看到的不是一个“集合”,而是一个“列表”。如何从集合产生成一个列表,是服务子系统的主要工作。服务子系统是在服务进行的过程中涉及相关软件程序,而网页处理子系统事先为这些软件程序准备了相应的数据。服务子系统的工作原理,主要有4个方面。

  一、查询方式和匹配。

  查询方式指的是系统允许用户提交查询的方式。对于普通用户来说,最自然的方式就是“需要查询什么就输入什么”。例如,用户输入“搜索引擎”,可能是他想了解搜索引擎的相关定义、概念和相应的知识;也可能是想了解目前有哪些搜索引擎,如何进行搜索等内容;也有可能是用户关心的是间接的信息。目前用一个词或者短语来进行查询,依然是主流的查询模式,这种模式比较简单并且容易实现。

  词的是搜索引擎中非常关键的一部分,通过字典文件对网页内的词进行识别。对于西文信息来说,需要识别词的不同形式,例如:单复数、过去式、组合词、词根等,对于一些亚洲语言(中文、日文、韩文等)需要进行分词处理。识别出网页中的每个词,并分配唯一的wordID号,用于为数据索引中的索引模块服务。

  例如:当用户输入“搜索引擎教程”时,系统首先将这个短语进行分词处理,将其分为“搜索 引擎 教程”,然后删除那些没有查询意义或者在每篇文档中都会出现的词,最后形成一个用于参与匹配的查询词表,该词表的数据结构是一个用对应的分词作为索引的一个倒排文件,它的每一个元素都对应倒排文件。这样系统就完成了查询和文档的匹配。

  二、索引库的建立。

  索引库的建立是数据索引中结构最复杂的一部分。一般需要建立两种索引:文档索引和关键词索引。文档索引分配给每个网页唯一的docID号,根据docID 号索引出在这个网页中出现过多少个wordID,每个wordID出现的次数、位置、大小格式等,形成docID对应wordID的数据列表;关键词索引其实是对文档索引的的逆索引,根据wordID索引出这个词出现在哪些网页(用wordID表示),出现在每个网页的次数、位置、大小写格式等,形成 wordID对应docID的列表。

  三、结果排序。

  结果就是将查询的结果的集合以列表的方式显示出来。所谓列表,就是按照某种评价方式,确定出查询结果集合中元素的顺序,让这些元素以某种顺序呈现出来,这就是相关性。相关性是形成这种查询顺序的的基本因素,有效地定义相关性本身是很难的,从原理上讲它不仅和查询词有关,而且还和用户的查询背景,以及用户的查询历史有关。不同需求的用户可能输入同一个查询,同一个用户在不同的时间输入的相同查询可能是针对不同的需求的。

  一般来讲,结果排序的方法是基于词汇出现频率,也就是说在一篇文档中包含的查询词越多,则该文档就越应该排在前面。这样的思路有一定的道理,而且在倒排文件数据结构上很容易实现。当我们通过关键词的提取过程,形成一篇文档的关键词的集合后,很容易得到每一个词在文档中出现的次数,即词率,而倒排文件中每个倒排表的长度则对应着每个词所涉及的文档的篇数,即文档频率。然而,由于网页编写的自发性、随意性较强,仅仅针对关键词的出现来决定文档的顺序,在Web 上做信息检索表现出明显的缺点,需要有其他技术的补充。通过在网页处理阶段为每篇网页形成一个独立于查询词(也就是和网页内容无关)的重要性指标,将它和查询过程中形成的相关性指标结合形成一个最终的排序,是目前搜索引擎给出查询结果排序的主要方法。

  搜索的处理过程是对用户的搜索请求进行满足的过程,通过用户输入搜索关键词,搜索服务器对应关键词字典,把搜索关键词转化为wordID,然后在索引库中得到docID列表,对docID列表进行扫描和wordID的匹配,提取满足条件的网页,然后计算网页和关键词的相关度,根据相关度的数值返回给用户。

  四、文档摘要。

  搜索引擎给出的结果是一个有序的条目列表,每个条目中有3个基本元素:标题、网页描述、网址和摘要。其中摘要需要从网页正文中生成。

  一般来讲,搜索引擎在生成摘要时可以归纳为两种方式:一种是“静态”方式,即独立于查询,按照某种股则,事先在预处理阶段从网页内容中提取出一些文字,如截取网页正文的开头512个字节(对应256个汉字),或者将每一个段落的第一个句子拼起来,等等。这样形成的摘要存放在查询子系统中,一旦相关文档被选中与查询匹配,就读出返回给用户。这种方式的优点是实现起来比较容易,缺点是摘要可能和查询的内容无关;另一种是“动态摘要”方式,即在相应查询的时候,根据查询词在文档中的位置,提取出周围的文字来,在显示时将查询词标亮。这是目前大多数搜索引擎采用的方式。为了保证查询的效率,需要在预处理阶段分词的时候记住每个关键词在文档中出现的位置。

浅谈搜索引擎技术原理与架构

  搜索引擎是我们非常熟悉的互联网产品,上网都离不开搜索,毫无疑问,在pc端,是多数流量的入口。大家都会说,“有问题,百度一下”,当初百度靠这句广告语,打开了国内很大的市场。

  曾经看过一个百度员工写的段子:“今天一个出租出司机载我去上班,一边看着百度大厦一边说,你们百度不就是个框吗,要这么多员工干啥。他说的好有道理,我竟无言以对”。那么搜索引擎背后到底是什么,到底复杂不复杂,这里为大家一一解答。本文只是简要介绍一下总体需要的原理,具体的技术原理,我会在后续的文章中深入介绍。

  1.索引

  输入一个关键词,就会出现相关的文档。如果这里有三篇文档,给一个关键词,就通过字符串匹配的方法就可以找到包含该关键词的文档,这很简单。那么如果有一百篇呢,同样对这一百篇文章逐个进行搜索即可,现代计算机对于上百篇文章的检索还是可以毫秒级的时间完成的。那么,网络上数以万计乃至上亿的文章,难道也要这样逐个搜索吗。索引就是解决搜索缓慢的方案,也就是说将每篇文章进行处理,对每一个出现的词建索引。每个词对应的列表是包含这个词的文章的列表,这被称为倒排索引。于是输入一个词,只要查找这张表,就能很快把包含这个词的文章给找出来。那如果有多个词呢,比如,在淘宝上搜索“黄色毛衣”,只要把包含“黄色”的商品和包含“毛衣”的商品求个交集。构建倒排索引是搜索引擎的基础。

  2.分词

  构建倒排索引的单位是词,词代表了语言中最基本的单位。在英文中,可以通过空格对每个词进行分开,而汉语就相对复杂了,不是通过空格分开的了,需要人通过语义进行分开。上面提到了“黄色毛衣”这个query,可以将“黄色”和“毛衣”分成两个基本的语言单位。但是,计算机来进行汉语分词就相对来说比较困难了。好在目前汉语分词技术已经非常成熟了,也有非常成熟的库进行调用,中科院,复旦等科研机构都对汉语分词技术研究得很深入。

  3.排序

  找出这些文章以后,怎么进行排序,哪篇文章靠前,哪篇文章靠后,也是个问题。我们暂且可以这样来进行排序,按照相关性来,如果搜索的query跟文档的标题一样,这个相关性就相对来说比在正文中出现这些query的文档高。如果词的顺序都一模一样,那相关性就更高了,如果一字不差,不多字也不少字,当然是相关性最高了。

  上述几个问题,是搜索的基础。只要解决了这几个问题,稍微花几天功夫,一个计算机系的研究生,就可以把一个简单的搜索引擎构建起来了。笔者画了一下简单的搜索引擎的技术架构图。

  那么搜索引擎的难点到底在哪呢,为什么人们都说,Google比百度好呢。

  首先,需要明确,搜索引擎的效果如何评价。回归到人们上网的本质意图,是搜索到自己需要的文档。如果搜索引擎能很快地并且很精准地把用户需要的网页找出来,那好评率会不断飙升,业内大家的共识是,每次搜索用户花在搜索引擎上的时间越短,搜索引擎越好。总结起来,笔者认为,搜索引擎的评价指标在于:速度、精准性、覆盖率、时效性。

  那么从这三个指标出发,就为搜索提出了一些列问题。

  首先,从速度来说,毫无疑问,搜索引擎需要快速对用户的搜索进行响应,把最好的结果展现给用户。我们使用不管哪一款搜索引擎,抛开网速不说,如果说不能在一秒内返回搜索结果,那么基本上就和这一款搜索引擎拜拜了。高速的搜索引擎需要依赖以下方面:

  1.高并发架构

  像百度这样的搜索引擎,每秒钟至少要能扛得住上百万次搜索请求。这是工程方面的问题。如果是用户量级上亿的搜索引擎,需要上百乃至上千的机器来处理请求。针对不同区域的用户,处理用户请求的机器都是不同的。

  由最开始的电信、移动、联通的网关到搜索引擎前端机器的流量划分,再到后端query处理、索引查询,一个搜索请求很可能需要经过几十台机器的处理,才将结果展现给用户,而这些流程,在毫秒级时间就完成了。对此,需要有反向代理、负载均衡这样的技术进行压力的分流,哪些片区需要多少台机器,保证这一片的机房不会因为流量过大而奔溃,都是经过工程师的多年运维经验,预估出来的。并且要考虑过节、突发事件、自然灾害对机房的影响等因素,进行多地备份。

  这不仅仅是搜索引擎需要解决的问题,淘宝、微信等任何一款用户量较大的产品也需要考虑大量用户访问带来的高并发处理。

  2.缓存技术

  每秒钟上百万次的搜索请求,都进行query处理、索引查表、求交集、重排序等工作显然也是扛不住的,就算有上百万台机器来处理,这显然是很浪费资源的。这样,缓存技术就有用武之地了。搜索query的热门程度,大致满足长尾分布(http://baike.baidu.com/link?url=JVwZiT_C4WBqFPLPmJRqiuW3m8kmARip_wv4LYCQLWOQoiXfoxfKGaHmjRIlCOBxYzAGD2653qI1uqmmY5t4Na)的,对于一些非常热门的关键词,可能每秒钟会出现好多次请求,这样,如果每次请求都重新处理一次,就是资源的浪费。可以在第一次处理完就把搜索的结果缓存起来,如果再次发生同样的请求,就可以到缓存池里直接把结果拿出来展现了。不在缓存中的结果就需要重新处理,这样每次需要重新处理的请求都是一些冷门的长尾query。

  对于缓存的策略,可以采用LRU算法,按照最近最少使用的方法进行记录的淘汰,如果系统庞大一点,可以设计多级缓存。

  3.索引端召回策略

  虽然建立了倒排索引,但是如果文章的量级很大,每个term所包含的文章都有上亿篇,对于求交和重排都是很耗费时间的。这就需要在索引端就对文章进行粗打分,如果分数都低于某个阈值,就不会将文档参与求交与精排序。那么另一个问题来了,这个分数怎样衡量,怎样的文档才算分数高。这就需要对query进行上下文的处理,结合其他query以及query本身指标进行粗打分。

  把网络上的文章全部收录并且构建索引需要用爬虫(spider或者crawler)将网络上的文章进行处理。

  1.爬虫策略技术

  爬虫是靠几个起点网页出发,通过网页上的链接导向下一个网页,顺藤摸瓜,将尽可能多的网页进行获取,这里就需要设计到底是深度优先搜索还是广度优先搜索方法来把文章获取到,同时需要对链接进行分析,比如计算网页的PageRank值(http://blog.jobbole.com/71431/),计算网页的权威值。同时,考虑到成本,也不是对所有的网页进行爬取,可以选择性挑选一些质量较高的网页优先进行爬取。至于这个网页质量如何评价,也是需要工程师不断在指标查看下进行优化的。

  网页内容是不断在变化的,几个月前,屠呦呦这个名字还不是很火,自从获得诺贝尔奖以后,很多相关的新闻就出来了。经常上网的人可能会发现,消息一发布,就很快就能在搜索引擎上检索到相关的新闻。从时效性出发,就需要爬虫对一些更新较频繁的网页进行频繁地访问,比如说新闻类网站。所以,网站更新频繁度的指标也是工程师们不断关注的。某些爬虫可能侧重于优先搜索更新频繁度较高的网页。

  那么同时,爬虫的访问会对目标网站带来压力,很多网站对有反爬虫机制,如果爬取地较频繁,很可能会被目标网站加入黑名单。需要在时效性与可用性之间寻找一个平衡。

  如果搜索引擎能非常“懂你”,并且将最好的结果放在最前面。那是相当友好,相当人性化的。为了做到这一点,需要程序对用户的query进行语言的理解,同时对用户的行为进行深入挖掘,例如点击以及停留。笔者认为,精准性是搜索引擎占领市场份额最重要的指标。于是也就提出了以下几个问题:

  1.query解析

  对于两个城市类型的query,比如说“北京上海”,可以解析出来,并且将相关火车票和机票的结果返回给用户。

  在地图检索中,对于“中关村肯德基”这样的query,识别出是商圈加上商户的类型,并将所在商圈的商家都返回给用户。

  在淘宝中,检索“好看的衣服”,就能识别出“好看”这样的修饰词和“衣服”这样的中心词,至于好看如何定性,那就是另外一回事了。

  另外,类似“北京遇上西雅图首映时间”这样的query,就需要实体识别了,因为分词系统将词切分的粒度比较小,像“北京遇上西雅图”这样的实体,就需要一个智能的系统来进行抽取了,同时在离线端,也需要将“北京遇上西雅图”这个实体建立索引。

  复杂query的理解,比如说“谢霆锋的是谁的儿子?”这样的query,需要用复杂的自然语言处理技术将query进行分析,转换成相应的格式去知识库中进行检索。

  针对这些不同的query模式,就可以对query进行分类,不同的query请求不用的服务器,然后整合自然搜索的结果,融合起来后进行结果的展示。百度率先推出了阿拉丁平台,给予商户一些接口,这样,搜索“北京上海”,不用再转到去哪儿网,就可以把机票火车票结果获取了。

  2.关键词改写

  用户输入的query可能由于用户个人理解记忆或者输入的手误打错,这会严重影响搜索的质量,如果搜索引擎能判断出用户输入错误,并进行纠正,把正确query的结果返回,那用户体验会得到更大的提升。对于一些明显错误的query,搜索引擎给直接把正确query的结果返回。如果是模棱两可的结果,搜索引擎会给出一些建议的query。

  query改写系统比较复杂,在离线阶段,需要对用户的搜索日志挖掘一些常用易出错的query term对,或者人工配置一些可能出错的term对,然后建立一个类似于机器翻译的模型。在在线阶段,按照模型进行候选query的计算。检索时,对原query检索的结果打分,结合改写后query的检索结果打分进行判断,到底是给改写后的query,还是给出一些建议,还是不做任何指示。这就需要进行多次检索,同时,结果的选择也可以做成一个分类的模型。

  不仅仅是错误的纠正,同义词的扩展也是query改写的一个非常重要的方面,比如说搜索iPhone需要同时把苹果手机相关的结果召回,搜索咖啡厅,同时也需要把咖啡馆相关的结果返回。同时,简称(北大与北京大学)、别名等改写也是需要采纳的。除了用扩展的办法以外,还可以将query与离线端都进行归一化,比如说“的哥”全部归一成“出租车司机”。至于采取哪种策略,需要结合线上的情况进行选择,或者各种方法的融合。

  3.个性化排序

  不同人对文章的要求不一样。喜欢音乐的人搜索李娜,就希望将歌手李娜的结果排前;喜欢运动的人就希望将运动员李娜的结果排前。传统的搜索引擎对于每个人展现的都是一样的结果,而随着人们需求的增大,个性化的搜索就很热门。这就需要搜索引擎对检索结果打分时考虑的不仅仅是相关性的因素,还需要考虑用户维度的特征。通过对用户历史行为的分析,建立用户的画像,每个用户都可以被量化为一个向量,同时每篇文档也被量化为一个向量,还有用户与文档交互维度的也被量化为一个向量,比如说用户曾经点击过此篇文档或者点击过类似的文档。那么这就是一个机器学习问题。

  基于机器学习的排序方法在学术界被称为learn to rank,目前比较成熟的方法有:pointwise、pairwise、listwise。

  4.知识库的建立

  前面提到的类似“谢霆锋的是谁的儿子?”这样的query的后面就不是简单的基于倒排索引的技术了,需要对实体构建知识库了,在这case中,谢霆锋就是一个实体,同时谢贤也是一个实体,同时,这两个实体之间有一个父子关系,为了构建一个强大的知识库,这都是需要添加的信息。

  于是,类似的问答机器人就出现了,一些号称能达到几岁儿童智商的机器人也被炒得很火。你会发现,这样的机器人知识渊博,深知天文下知地理,其实是靠强大的语音识别技术、语言理解技术、知识库技术、搜索技术支撑的。

  因此,复杂的搜索引擎架构图如下所示:

  这些技术可能只是冰山一角,里面任何一个模块,在大公司里都是需要几十人的团队来完成的,同时还有很多部门负责对这些模块进行有机连接。任何算法都没有绝对的好与坏,都是需要认真调研,并对现有的瓶颈进行分析,选择候选的多个方案进行性能的评估,压力测试才可上线的。

  一个商用的搜索引擎组成部分起来是很复杂的,同时运维和策略都是持久战,尤其是在移动互联网快速发展,竞争激烈的今天。这些技术都是国内网很多工程师、教授乃至图灵奖获得者的智慧的结晶,一个好的搜索引擎依赖分布式、并行计算、人工智能、机器学习等技术。看完此文,你还觉得搜索引擎简单吗,你可以告诉出租车师傅,为什么百度需要这么多员工了吧。

搜索引擎的架构和工作原理图

  搜索引擎发展史:分类目录(网址导航)是史前时代、文本检索是第一代、链接分析是第二代、以用户中心是第三代,

  搜索引擎的3个目标:更全、更快、更准。

  搜索引擎的3个核心问题:1.用户真正的需求是什么,2.哪些信息是和用户需求是真正相关的,3.哪些信息是用户可以信赖的。

  搜索引擎的架构,一张图可以说明情况:

  搜索引擎的整体架构示意图:

搜索引擎架构图

我们来看一下搜索引擎的架构(上图):

  网络爬虫爬行互联网连接;

  网页计算去重;

  添加索引;

  内容,链接计算;

  网页排序;

  形成对应词典,存入cache系统;

  用户检索;

  分析内容,调出词典内容

  这基本上是一个网页从产生到呈现的过程,当然这个过程很复杂,这里只是简单的比拟出来。不过我们可以看到,网络的爬虫对我们网站是何等的重要,这也是很多卖蜘蛛池的原因吧。其次是网页的去重,因为现在百度自身服务器内部很多的网页缓存,蜘蛛爬去过得内容百度会经过一系列的计算后去除重复网页,这里面有一个比较复杂的算法,这个以后可以详细来讲。`

  我们看网页的排序有两个方面因素的影响:内容的相似性&链接分析,大概这就是我们常说的SEO“内容为王,外链为皇”理论依据吧。其实网页排序的影响因素有很多,但是内容和链接是基础的比较重要的影响因素。

  网页排序之后就是生成关键词的词典存入搜索引擎的Cache系统,一方面可以快速的提供用户查询信息,另一方面就是减轻搜索引擎的计算压力。

  除了上述的子功能模块,“反作弊”模块也日益重要。

  互联网页面划分为五个部分:1.已下载网页集合、2.已过期网页集合、3.待下载网页集合、4.可知网页集合、5.不可知网页集合。

  网络爬虫分为:批量性爬虫、增量型爬虫、垂直型爬虫。

  爬虫抓取的策略:1.宽度优先遍历、2.非完全PageRank、3.OPIC(Online Page Importantance Computation)、4.大站优先。

  网页更新策略:1.历史参考策略、2.用户体验策略、3.聚类抽样策略

【SEO教程】搜索引擎原理篇

  【SEO教程】搜索引擎原理篇

【SEO教程】搜索引擎原理篇

  古人云,知自知彼,方能百战不殆,做SEO也是如此:我们只有研究透了对方的整体实力,找出他们的优势与弱点,避其锋芒,专攻要害,才能战必胜,这就是是做SEO之道。顺时百度优化认为,我们想要在SEO做的青出于蓝而胜于蓝,唯有了解了搜索引擎的工作原理,才能发掘和创造更多的SEO优化技巧!

  顺时百度优化教你如何做百度优化

  古人云,知自知彼,方能百战不殆,做SEO也是如此:我们只有研究透了对方的整体实力,找出他们的优势与弱点,避其锋芒,专攻要害,才能战必胜,这就是是做SEO之道。顺时百度优化认为,我们想要在SEO做的青出于蓝而胜于蓝,唯有了解了搜索引擎的工作原理,才能发掘和创造更多的SEO优化技巧!

  举个例子,一些男生很羡慕明星的人鱼线、八块腹肌,就会上网搜索一些能够快速健身、塑型的方法,这类词不外乎就是“健身”、“腹肌”。细心的人一定会发现,第一次搜索这类词的时候,搜索结果会逐渐刷新出来,当你复制这个词再搜索一次,搜索结果立马就刷新出来了,不管以后尝试了多少次,搜索结果都是秒刷出来。这就是搜索引擎的工作原理:搜索引擎接到用户的的搜索指令后,它首先调用缓存,如果用户以前没有搜索过同类词,就会去数据库读取;如果用户搜索过,就直接从缓存读取,工作量的不同造成了搜索结果展现速度的不同。说的再直白点,就是第一次走迷宫,肯定花很多时间,但是,当你第二次去走的时候,轻车熟路,耗时肯定短。这就是搜索引擎的工作原理。

  搜索引擎的工作原理需要这下面的四大系统去配合

  1、下载体系

  顾名思义,就是把网站的所有网页采集下载下来,建立一个仓库,并储存下来。下载系统采用多线程方式工作,而每一个线程就是依靠很多的Spiders去抓取收录。当搜索引擎下载网页的时候,会建立两张不同的表,一张记录拜访过的网站,另一张记录没有拜访过的网站,这样的好处是,当Spider抓取某个外部连接的页面的URL的时候,如果发现已经存在访问的列表里了,Spider就会丢弃这个URL,不再访问,减少工作量,提高搜索引擎的工作效率。

  搜索引擎不会将所有的网页都会抓取过来,所以它只会选取重要的页面优先抓取,重要的页面需要具备以下条件:

  1)、我用外链多,入度大,被引用的多;

  2)、网页的镜像度高;

  3)、网页的上层页面入度大;

  4)、网页的目录深度小。

  优先抓取的重要性网页,会被给于一个很好的排名。一个稳定、高效的下载系统是搜索引擎提供服务的根基。

  2、分析系统

  搜索引擎不是人,不能通过眼睛去阅读页面的内容,只能通过分析系统去大概了解网站的展示内容是包含违法信息,如果是带有违法信息的页面,会自动过滤掉,或者给予这类页面一个坏的排名,防止用户搜索出来这类垃圾信息,影响搜索引擎信誉度。

  搜索引擎虽然看不懂网页,但是她会对网页进行切词,即将一个长句子分解成若干个词语,比如“百度优化哪家好。”,搜索引擎会把这句话拆分成“百度优化,哪家,好”。然后自动过滤掉一些高频词,比如语气助词等,余下的词就建成一个索引。通过切词,搜索引擎把网页转化成一个词集合,才能对网页建立索引,才能在用户的搜索结果中展现。

  3、建立索引

  通过分析系统的“切词”,网页已经不再是网页了,变成了一堆关键词,然后将这些词按照先后顺序排列好,建立索引,就能提高搜索引擎的检索效率了。

  关键词排序的算法:

  1)、基于内容的排序算法。内容排序算法是根据词频、关键词出现的位置来判定的,在搜索引擎允许的范围内,词频越高就更有利于更好地排名。

  2)、基于超链接分析的排序算法。超链接分析的排序算法,弥补了内容排序算法的不足,防止恶意堆砌关键词的行为。

  3)、竞价排名。竞价排名是搜索引擎公司的盈利手段,只要商户支付钱,就能获得好的排名,不含任何的技术含量,效果立竿见影。

  4、查询服务

  当用户在搜索引擎输入相关关键词获取想要的资料的时候,搜索引擎就会将事先建立好的与用户查询相匹配的索引(搜索结果)展示出来。

  以上就是搜索引擎的工作原理,今天顺时百度优化就跟大伙讲到这里,明天将给大家讲解的是SEO的必备基础知识篇

百度搜索引擎工作原理分析

  在正式学习SEO之前,你还需要学习一下搜索引擎的工作原理,毕竟SEO是针对搜索引擎进行操作的,那么弄明白搜索引擎的工作原理,那么遇到一些问题的时候,你就可以知道问题产生的原因了。一个搜索引擎,一般由下面几个模块组成:

  1、抓取模块

  2、过滤模块

  3、收录模块

  4、排序模块

  抓取模块

  搜索引擎在运作的时候,第一个工作就是要去互联网上面抓取页面,而实现这个工作的模块,我们称为抓取模块。学习抓取模块,我们需要先了解下面几个知识点:

  1、搜索引擎抓取程序:蜘蛛

  搜索引擎为了可以自动抓取互联网上面数以万计的网页,必须有一个全自动的页面抓取程序。而这个程序我们一般称之为“蜘蛛”(也可以叫做“机器人”)。那么不同的搜索引擎的蜘蛛,叫法也就不同了。百度的抓取程序,一般称为百度蜘蛛。

  谷歌的抓取程序,一般称为谷歌机器人。

  360的抓取程序,一般称为360蜘蛛。

  其实,不管叫做蜘蛛,还是机器人,你只要知道这个指的是搜索引擎的抓取程序,就可以了。蜘蛛的任务很简单,就是顺着链接不断的抓取互联网上,自己还没有收录过的网页和链接,然后将抓取到的网页信息和链接信息存储到自己的网页数据库中。而这些抓取到的网页,将有机会出现在最终的搜索结果中。

  2、怎么让蜘蛛来抓取我们的网站

  通过上面对蜘蛛的解释,我们能够知道:要想自己的页面最终出现在搜索结果中,首先得让蜘蛛抓取到我们的网站。通过下面三种方法可以让蜘蛛来抓取我们的网站

  外部链接:我们可以在一些已经被搜索引擎收录的网站上面发布自己网站的链接,以此吸引蜘蛛,或者交换友情链接也是一个常用的方法。

  提交链接:百度为站长们提供了链接提交的工具,通过这个工具,我们只需要通过这个工具提交给百度,那么百度就会派出蜘蛛来抓取我们网页了。

  百度网址提交工具网址(如图所示):

  http://zhanzhang.baidu.com/linksubmit/url

百度搜索引擎工作原理分析-百度搜索引擎原理

  蜘蛛自己来抓取:如果你希望蜘蛛能够定期主动来自己的网站抓取网页,那么你就必须提供优质的网站内容。只有蜘蛛发现你的网站的内容质量很好,那么蜘蛛就会特别关照你的网站,定时会来你的网站看看是不是新的内容产生。如何才能够确保自己的网站能够提供优势的内容,这个话题我们在之后的章节再做阐述。

  3、怎么知道蜘蛛来过我们网站

  通过下面2个方式可以知道蜘蛛是否来过我们的网站。

  (1)百度抓取频次工具

  该工具网址为:http://zhanzhang.baidu.com/pressure/index

百度搜索引擎工作原理分析-百度搜索引擎工作原理

(2)服务器IIS日志

  如果你的服务器开启了IIS日志功能,那么也可以通过IIS日志文件看到蜘蛛来过的痕迹。通过IIS日志我们可以发现百度蜘蛛抓取我们那些页面。

  4、影响蜘蛛抓取的因素

  好了,我们知道了网站想要有排名,第一步就是必须能够被蜘蛛抓取到。那么那些因素有可能造成蜘蛛无法正常抓取我们网页呢,我们应该注意下面几个要点:

  (1)网址不能过长:百度建议网址的长度不要超过256个字节(一个英文字母(不分大小写))占一个字节的空间,一个中文汉字占两个字节的空间)。

  (2)网址中不要包含中文:百度对于中文网址的抓取效果都是比较差的,所以在网址内千万不要带有中文。

  (3)服务器问题:如果你的服务器质量太差,总是打不开,那么也会影响蜘蛛的抓取效果。

  (4)Robots.txt屏蔽:有的SEO人员由于疏忽。在Robots.txt文件里面屏蔽了想要被百度抓取的路径或者页面。这也会影响到百度对于我们网站的抓取效果。

  (5)避免出现蜘蛛难以解析的字符,比如/abc/123456;;;;;;;%B9&CE%EDDS$GHWF%.html这种URL蜘蛛无法理解会放弃抓取。

  (6)注意动态参数不要太多太复杂,目前百度对动态URL已经有了很好的处理,但是参数过多且复杂的url有可能被蜘蛛认为不重要而抛弃。这点尤为重要,一定注意。

  过滤模块

  由于互联网上充斥着大量的垃圾页面和无内容页面,而这些页面不管对于搜索引擎,还是搜索用户来说,都是不需要的。所以搜索搜索引擎为了避免这些垃圾页面占用自己宝贵的存储资源,所以会对蜘蛛抓取回来的内容进行过滤。完成这个功能的模块,我们就称为过滤模块。那么那些因素会影响到过滤模块呢,有下面2点:

  (1)识别

  由于搜索引擎的蜘蛛目前最擅长的还是分析文字和链接,对于图片和视频的识别还是比较困难的。所以假如一个页面主要都是图片和视频话,那么搜索引擎很难识别出该页面的内容。而对于这种页面,搜索引擎有可能当作垃圾网站进行过滤掉。所以,我们在编辑网站内容的时候,应该多添加一些文字描述,这样才不容易被过滤模块过滤掉。

  (2)内容质量

  在可以识别内容的基础之上,搜索引擎还会将抓取到的网页内容,与已经存到数据库中的内容进行对比。如果搜索引擎发现你的页面内容质量与数据库中的内容大部分都是重复的,或者相比之下质量更差的话,那么这个页面也会被过滤掉。

  收录模块

  将通过了过滤模块“考核”的网页,进行分词、数据格式标准化,然后将其存储到索引数据库中程序模块,我们称之为收录模块。如果你的网站有幸通过收录模块,那么就有机会获得排名了。

  1、如何查看某个网页是否被收录

  最简单的办法,就是把该网页的网址复制到百度搜索框中进行搜索,如果能够出现该页面的搜索结果,那么就说明该网址已经被收录了。

百度搜索引擎工作原理分析-百度搜索引擎的原理

2、如何查看一个网站的收录量

  有2个方法:

  (1)site命令

  通过“site:域名”的命令,我们可以看到搜索引擎抓取了某个域名下的页面收录量:

百度搜索引擎工作原理分析-百度网盘搜索引擎原理

(2)百度“索引量”查询工具

  通过百度官方提供的“索引量”查询工具,也可以查询到我们网站的收录量。

  收录量少怎么办?

  这个分两种情况:

  (1)新站

  一般来说,新站刚上线,起码要1~2个月才会开始收录。前期一般只是收录一个首页而已。对于这个情况,没有别的办法,因为百度为了防止垃圾站的泛滥,特地把新站的审核时间拉长。所以,如果你操作的是新站,那么收录量少不用紧张,只要你老老实实的提供优质内容,那么2个月之后百度就会开始收录你的内页了。

  (2)老站

  有的老站会出现收录量少,甚至是收录量开始减少的时候。一般都是因为该网站的内页内容质量太差导致的。

  这个时候站长应该赶紧调整整站的内容质量,提供优质的内容才有可能确保自己的网站排名不会变动。

  排序模块

  对存入索引数据库中的页面,通过一系列算法后得到每个页面的权重,并且将其进行排序处理的程序,称之为排序模块。

  如果你的页面通过排序模块的计算,排在了某个关键词的前几位的话,那么当搜索用户搜索该关键词的时候,你的页面就可以展现在用户的面前了。想要让自己的网站能够获得良好的排名,需要做到下面2点:

  1、完善基础优化

  想要获得良好的排名,那么你的网页首先要做好基础优化,这包括网站定位、网站结构、网站布局、网站内容等几个部分。这些基础优化的内容,我们将在后面详细阐述。只有把这些基础部分完善优化好了,才算是及格了。

  2、综合数据良好

  在基础优化做好的基础上,假如你的百度统计后台数据表现良好,用户的忠诚度以及站外推广的效果显著的话,就会在及格线上加分。只要你的加分超过了所有的竞争对手,那么你的网站就可以排在所有对手的前面了。

  总结

  本文为你讲解了搜索引擎的工作原理,那么掌握这一原理对于你学习SEO有什么帮助呢?

  帮助就在于当你遇到一些SEO技术问题的时候,可以通过搜索引擎的工作原理找到原因。

  比如你是一个新站,做了1个月发现只收录了首页。这个时候你可以知道那是因为收录模块对于新站有一个考核期,所以这属于正常现象。

  有或者你发现自己网站的文章收录正常,但是没有排名,这个时候你就知道你的文章虽然被收录模块收录了,但是由于基础优化和综合数据不够良好,所以排序模块没有给出良好的排名。因此你可以知道接下来的工作应该是提升网站的内容质量。

  所以,掌握搜索引擎的工作原理,对于我们学习SEO是至关重要的。

  以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索网页 , 搜索引擎 , 基础 , 模块 , 链接 质量 百度搜索引擎原理、百度搜索引擎工作原理、百度搜索引擎的原理、百度网盘搜索引擎原理、百度搜索引擎案例分析,以便于您获取更多的相关知识。

百度,google等搜索引擎的工作原理是什么?

  一、搜索引擎的分类

  获得网站网页资料,能够建立数据库并提供查询的系统,我们都可以把它叫做搜索引擎。按照工作原理的不同,可以把它们分为两个基本类别:全文搜索引擎(FullText Search Engine)和分类目录Directory)。

  全文搜索引擎的数据库是依靠一个叫“网络机器人(Spider)”或叫“网络蜘蛛(crawlers)”的软件,通过网络上的各种链接自动获取大量网页信息内容,并按以定的规则分析整理形成的。Google、百度都是比较典型的全文搜索引擎系统。

  分类目录则是通过人工的方式收集整理网站资料形成数据库的,比如雅虎中国以及国内的搜狐、新浪、网易分类目录。另外,在网上的一些导航站点,也可以归属为原始的分类目录,比如“网址之家”。

  全文搜索引擎和分类目录在使用上各有长短。全文搜索引擎因为依靠软件进行,所以数据库的容量非常庞大,但是,它的查询结果往往不够准确;分类目录依靠人工收集和整理网站,能够提供更为准确的查询结果,但收集的内容却非常有限。为了取长补短,现在的很多搜索引擎,都同时提供这两类查询,一般对全文搜索引擎的查询称为搜索“所有网站”或“全部网站”,比如Google的全文搜索(http://www.google.com/intl/zh-CN/);把对分类目录的查询称为搜索“分类目录”或搜索“分类网站”,比如新浪搜索和雅虎中国搜索(http://cn.search.yahoo.com/dirsrch/)。

  在网上,对这两类搜索引擎进行整合,还产生了其它的搜索服务,在这里,我们权且也把它们称作搜索引擎,主要有这两类:

  ⒈元搜索引擎(META Search Engine)。这类搜索引擎一般都没有自己网络机器人及数据库,它们的搜索结果是通过调用、控制和优化其它多个独立搜索引擎的搜索结果并以统一的格式在同一界面集中显示。元搜索引擎虽没有“网络机器人”或“网络蜘蛛”,也无独立的索引数据库,但在检索请求提交、检索接口代理和检索结果显示等方面,均有自己研发的特色元搜索技术。比如“metaFisher元搜索引擎”

  (http://www.hsfz.net/fish/),它就调用和整合了Google、Yahoo、AlltheWeb、百度和OpenFind等多家搜索引擎的数据。

  ⒉集成搜索引擎(All-in-One Search Page)。集成搜索引擎是通过网络技术,在一个网页上链接很多个独立搜索引擎,查询时,点选或指定搜索引擎,一次输入,多个搜索引擎同时查询,搜索结果由各搜索引擎分别以不同页面显示,比如“网际瑞士军刀”(http://free.okey.net/%7Efree/search1.htm)。

  二、搜索引擎的工作原理

  全文搜索引擎的“网络机器人”或“网络蜘蛛”是一种网络上的软件,它遍历Web空间,能够扫描一定IP地址范围内的网站,并沿着网络上的链接从一个网页到另一个网页,从一个网站到另一个网站采集网页资料。它为保证采集的资料最新,还会回访已抓取过的网页。网络机器人或网络蜘蛛采集的网页,还要有其它程序进行分析,根据一定的相关度算法进行大量的计算建立网页索引,才能添加到索引数据库中。我们平时看到的全文搜索引擎,实际上只是一个搜索引擎系统的检索界面,当你输入关键词进行查询时,搜索引擎会从庞大的数据库中找到符合该关键词的所有相关网页的索引,并按一定的排名规则呈现给我们。不同的搜索引擎,网页索引数据库不同,排名规则也不尽相同,所以,当我们以同一关键词用不同的搜索引擎查询时,搜索结果也就不尽相同。

  和全文搜索引擎一样,分类目录的整个工作过程也同样分为收集信息、分析信息和查询信息三部分,只不过分类目录的收集、分析信息两部分主要依靠人工完成。分类目录一般都有专门的编辑人员,负责收集网站的信息。随着收录站点的增多,现在一般都是由站点管理者递交自己的网站信息给分类目录,然后由分类目录的编辑人员审核递交的网站,以决定是否收录该站点。如果该站点审核通过,分类目录的编辑人员还需要分析该站点的内容,并将该站点放在相应的类别和目录中。所有这些收录的站点同样被存放在一个“索引数据库”中。用户在查询信息时,可以选择按照关键词搜索,也可按分类目录逐层查找。如以关键词搜索,返回的结果跟全文搜索引擎一样,也是根据信息关联程度排列网站。需要注意的是,分类目录的关键词查询只能在网站的名称、网址、简介等内容中进行,它的查询结果也只是被收录网站首页的URL地址,而不是具体的页面。分类目录就像一个电话号码薄一样,按照各个网站的性质,把其网址分门别类排在一起,大类下面套着小类,一直到各个网站的详细地址,一般还会提供各个网站的内容简介,用户不使用关键词也可进行查询,只要找到相关目录,就完全可以找到相关的网站(注意:是相关的网站,而不是这个网站上某个网页的内容,某一目录中网站的排名一般是按照标题字母的先后顺序或者收录的时间顺序决定的)。

  搜索引擎并不真正搜索互联网,它搜索的实际上是预先整理好的网页索引数据库。

  真正意义上的搜索引擎,通常指的是收集了因特网上几千万到几十亿个网页并对网页中的每一个词(即关键词)进行索引,建立索引数据库的全文搜索引擎。当用户查找某个关键词的时候,所有在页面内容中包含了该关键词的网页都将作为搜索结果被搜出来。在经过复杂的算法进行排序后,这些结果将按照与搜索关键词的相关度高低,依次排列。

  现在的搜索引擎已普遍使用超链分析技术,除了分析索引网页本身的内容,还分析索引所有指向该网页的链接的URL、AnchorText、甚至链接周围的文字。所以,有时候,即使某个网页A中并没有某个词比如“恶魔撒旦”,但如果有别的网页B用链接“恶魔撒旦”指向这个网页A,那么用户搜索“恶魔撒旦”时也能找到网页A。而且,如果有越多网页(C、D、E、F……)用名为“恶魔撒旦”的链接指向这个网页A,或者给出这个链接的源网页(B、C、D、E、F……)越优秀,那么网页A在用户搜索“恶魔撒旦”时也会被认为更相关,排序也会越靠前。

  搜索引擎的原理,可以看做三步:从互联网上抓取网页→建立索引数据库→在索引数据库中搜索排序。

  1.从互联网上抓取网页

  利用能够从互联网上自动收集网页的Spider系统程序,自动访问互联网,并沿着任何网页中的所有URL爬到其它网页,重复这过程,并把爬过的所有网页收集回来。

  2.建立索引数据库

  由分析索引系统程序对收集回来的网页进行分析,提取相关网页信息(包括网页所在URL、编码类型、页面内容包含的关键词、关键词位置、生成时间、大小、与其它网页的链接关系等),根据一定的相关度算法进行大量复杂计算,得到每一个网页针对页面内容中及超链中每一个关键词的相关度(或重要性),然后用这些相关信息建立网页索引数据库。

  3.在索引数据库中搜索排序

  当用户输入关键词搜索后,由搜索系统程序从网页索引数据库中找到符合该关键词的所有相关网页。因为所有相关网页针对该关键词的相关度早已算好,所以只需按照现成的相关度数值排序,相关度越高,排名越靠前。

  最后,由页面生成系统将搜索结果的链接地址和页面内容摘要等内容组织起来返回给用户。

  搜索引擎的Spider一般要定期重新访问所有网页(各搜索引擎的周期不同,可能是几天、几周或几月,也可能对不同重要性的网页有不同的更新频率),更新网页索引数据库,以反映出网页内容的更新情况,增加新的网页信息,去除死链接,并根据网页内容和链接关系的变化重新排序。这样,网页的具体内容和变化情况就会反映到用户查询的结果中。

  互联网虽然只有一个,但各搜索引擎的能力和偏好不同,所以抓取的网页各不相同,排序算法也各不相同。大型搜索引擎的数据库储存了互联网上几亿至几十亿的网页索引,数据量达到几千G甚至几万G。但即使最大的搜索引擎建立超过二十亿网页的索引数据库,也只能占到互联网上普通网页的不到30%,不同搜索引擎之间的网页数据重叠率一般在70%以下。我们使用不同搜索引擎的重要原因,就是因为它们能分别搜索到不同的内容。而互联网上有更大量的内容,是搜索引擎无法抓取索引的,也是我们无法用搜索引擎搜索到的。

  你心里应该有这个概念:搜索引擎只能搜到它网页索引数据库里储存的内容。你也应该有这个概念:如果搜索引擎的网页索引数据库里应该有而你没有搜出来,那是你的能力问题,学习搜索技巧可以大幅度提高你的搜索能力。

返回头部