1 引言
搜索是算法应用的一个重要分支,国内搜索的巨头当然非百度莫属。为了更好的理解搜索引擎,本文以《百度搜索引擎的工作原理》作为学习资料,进一步打开学习搜索的大门。
本文的内容分为四个章节,分别是:抓取建库,检索排序,外部投票,结果展现。
2 抓取建库
搜索引擎工作的首要环节就是获取大量的互联网信息,那么数据抓取系统就就自然是整个搜索系统中的上游,它的任务主要是负责互联网信息的搜集、保存和更新环节,也就是我们常说的“spider”。
2.1 Spider抓取系统的基本框架
Spider抓取系统的工作原理可以看做是对有向图的遍历(web之间的链接建立的有向图),从一些重要的种子URL开始,通过页面上的超链接关系,不断地发现新的URL并抓取,尽最大可能抓取到更多的有价值网页。
由于互联网中的网页可能每时每刻都会被修改、删除或者出现新的超链接,因此,还需要对Spider过去抓取过的页面保存更新,维护一个URL库和页面库。
下面介绍一下Spider抓取系统的基本框架,如下图所示。从图中可以看出,该系统包括链接存储系统、链接选取系统、dns解析服务系统、抓取调度系统、网页分析系统、链接提取系统、链接分析系统、网页存储系统。
- 可以看出该框架中有两个库,一个是链接库,另一个是网页库;
- Spider系统的链接抓取是循环的,链接存储系统->链接选取系统->抓取系统->链接提取系统->链接分析系统->链接存储系统
2.2 BaiduSpider主要抓取策略类型
为了使系统可以抓取尽可能多的有价值的资源并保持系统及实际环境中页面的一致性,同时不给网站体验造成压力,会设计多种复杂的抓取策略。
2.2.1 抓取友好性
抓取系统需要耗费被抓网站的带宽造成访问压力,如果程度过大会直接影响被抓网站正常用户的访问行为,因此在抓取过程中需要进行一定的抓取压力控制。
- 基于IP的压力控制;假如使用基于域名的压力控制,会存在一个域名对应多个IP(大网站),或者多个域名对应同一个IP的问题(小网站共享IP);
- 基于IP和域名的多种条件的压力控制,同时站长还可以人工调配对自己网站的抓取压力;
- 抓取速度控制包括两类:一是抓取频率,二是抓取流量
- 同一站点不同时间抓取速度也会不同,例如夜深人静的时候,抓取速度往往快一些;
2.2.2 常用的抓取返回码示意
- 404代表“NOT FOUND”,认为网页已经失效,通常将在库中删除;
- 503代表“Service Unavilable”,认为网页临时不可访问,原因包括:网站临时关闭和带宽有限;
- 403代表“Forbidden”,认为网页目前禁止访问;
- 301代表“Moved Permanently”,认为网页重定向至新url;
2.2.3 多种URL重定向的识别
- 所谓url重定向是指当使用者浏览某个网址时,将他导向到另一个网址的技术;
- 由于url重定向的存在,为了对该部分正常抓取,就要求spider对url重定向进行识别判断,同时防止作弊行为
2.2.4 抓取优先级调配
- 由于互联网资源巨大,想要全部抓取并保持一致性是一件几乎不可能的事情;
- 因此需要设计一套合理的抓取优先级调配策略,主要包括:深度优先遍历策略,宽度优先遍历策略,pr优先策略,反链策略以及社会化分享知道策略等等
2.2.5 重复url的过滤
spider在抓取过程中需要判断一个页面是否已经抓取过,判断是否已经抓取涉及到最核心的快速查找并对比,常见方法包括bloomfilter等;
2.2.6 暗网数据的获取
所谓暗网数据是指互联网中存在的无法抓取的数据,对于暗网数据的抓取主要思路是通过开放平台采用数据提交的方式来解决。
2.2.7 抓取反作弊
Spider在抓取过程中往往会遇到所谓的抓取黑洞(链接本身是一个无限循环)或者面临大量低质量页面的困扰,这就要求设计一套反作弊的系统,例如分析url特征,分析页面大小及内容,分析站点规模对应抓取规模;
2.3 BaiduSpider抓取过程中设计的网络协议
Spider抓取系统直接涉及互联网资源提供者的利益,因此抓取过程中需要遵守一定的规范,以便于双方的数据处理及对接,这个规范也就是我们所说的网络协议。
2.3.1 http协议
- 超文本传输协议,是互联网应用最为广泛的一种网络协议,客户端和服务端请求和应答的标准。
- 客户端用户通过浏览器向服务器指定端口发送http请求,发送http请求会返回对应的httpheader信息,可以看到包括是否成功、服务器类型、网页最近更新时间。
2.3.2 https协议
- 加密版的http
2.3.3 UA属性
- UA即user-agent,是http协议的一个属性,代表了终端的身份,向服务器端表明我是谁来干嘛,进而服务器端可以根据不同的身份来做出不同的反馈结果
2.3.4 robots协议
- robots是搜索引擎访问一个网站要访问的第一个文件,该文件用于确定哪些允许抓取哪些禁止抓取
2.4 BaiduSpider抓取频次原则即调整方法
对于各个网站不可能做到一视同仁,会综合考虑站点实际情况确定抓取配额,每天定量抓取站点内容,也就是抓取频次,那么根据什么指标来确定网站抓取频次呢?
- 网站更新频率,更新快多来,更新慢少来
- 网站更新质量
- 连通度,网站应该稳定
- 站点评价,百度搜索引擎会对每个站点有一个评分;
2.5 造成BaiduSpider抓取异常的原因
- 服务器连接异常;
- 网络运营商异常
- DNS异常
- IP封禁
- UA封禁
- 死链
- 异常跳转
- 其他异常
2.6 新链接重要程度判断
上面讲到了BaiduSpider异常抓取的原因,下面介绍抓取的一些原则,即判断哪个更重要?
- 对用户的价值
- 链接的重要程度
2.7 百度优先建重要库的原则
BaiduSpider抓了多少页面不是最重要的,重要的是有多少页面被建索引库。众所周知,搜索引擎的索引库是分层级的,优质的网页被分配到重要索引库,普通网页待在普通索引库,再差的网页分配到低级库,目前60%的检所需求只调用重要索引库。
哪些网页可以进入优质索引库呢?
- 有时效性且有价值的页面
- 内容优质的专题页面
- 高价值原创内容的页面
- 重要个人页面
2.8 哪些网页无法建入索引库
- 重复内容的网页
- 主题内容短的网页
- 部分作弊网页
3 检索排序
众所周知,搜索引擎的主要工作过程包括:抓取,存储,页面分析,索引,检索等几个主要过程。
3.1 索引系统
怎么从用户体验角度考虑,在毫秒级别给予用户满意的结果?
如果能知道用户查找的关键词都出现在哪些页面中,那么用户检索的处理过程可以想象为包含了query中切词后不同部分的页面集合求交的过程,而检索即变成了页面名称之间的比较和求交。这就是我们通常所说的倒排索引及求交检索的过程,如下为建立倒排索引的基本过程:
- 页面分析实际上是将原始页面的不同部分进行识别和标记,例如:title,keywords,content,link和anchor等;
- 分词的过程实际上包括切词,分词,同义词转换和同义词替换等等;
- 做好页面分析和切词分词之后,就是建立倒排索引了,下面是建立倒排索引的过程:
倒排索引是搜索引擎实现毫秒级检索的非常重要的一个环节,下面我们要重要介绍一下索引系统建立倒排索引的重要过程--入库写库。
3.2 倒排索引的重要过程-入库写库
索引系统在建立倒排索引后还需要有一个入库写库的过程,为了提高效率这个过程还需要将全部term以及偏移量保存在文件头部,并且对数据进行压缩。下面简要介绍索引之后的检索系统。
检索系统包括五个部分,如下图所示:
- query串切词分词即将用户的查询词进行分词,对之后的查询做准备,以“10号线地铁故障”为例,可能的分词如下:
10 0x123abc
号 0x13445d
线 0x234d
地铁 0x145cf
故障 0x354df
- 查出含每个term的文档集合,即找出待选集合,如下:
0x123abc 1 2 3 4 7 9…..
0x13445d 2 5 8 9 10 11……
……
……
- 求交,上述求交,文档2和文档9可能是我们需要寻找的,整个求交过程实际上关系着整个系统的性能,这里面包含了使用缓存等等手段进行性能优化;
- 各种过滤,举例可能包含过滤掉死链、重复数据、色情、垃圾结果等等;
- 最终排序,将最能满足用户需求的结果排序在最前,可能包括的有用信息如:网站的整体评价、网页质量、内容质量、资源质量、匹配程度、分散度、时效性等等。
3.3 影响搜索结果排序的因素
用户输入关键词进行检索,百度搜索引擎在排序环节要做两方面的事情,一方面需要把相关网页从索引库中提取出来,第二是把提取出来的网页按照不同维度的得分进行综合排序,“不同维度”包括:
- 相关性,网页内容和用户检索的匹配程度,比如网页包括的用户检索关键词个数;
- 权威性;
- 时效性;
- 重要性;
- 丰富度;
- 受欢迎程度
以上便是百度搜索引擎决定搜索结果排序的六大原则,至于哪个原则占比更大,没有一个确切答案;
3.4 低质网页阻击策略-石榴算法
我们理解网站生存发展需要资金支持,从来不反对网站添加各种合法广告,但是大量有损用户体验的广告,会严重影响百度搜索引擎用户的使用感受;鉴于此,百度质量团队针对低质量网页推出了石榴算法,旨在打击含有大量妨碍用户正常浏览的恶劣广告页面。
4 外部投票
曾经,“内容为王,外链为皇”的说法流行了很多年,通过超链计算得分来体现网页的相关性和重要性,的确曾经是搜索引擎用来评估网页的重要参考因素之一,会直接参与搜索结果排序计算。
4.1 外链的作用
- 吸引蜘蛛抓取;
- 向搜索引擎传递相关信息;
- 提升排名;
- 内容分享,获得口碑;
4.2 切断买卖外链的利刃-绿萝算法
百度质量团队推出绿萝算法,针对买卖链接行为再次强调:买卖链接行为一方面影响用户体验,干扰搜索引擎算法;另一方面让投机建站者得利。针对买卖链接行为在清除外链计算的基础上,以下三种类型的网站会受到不同程度的影响:
- 超链中介;
- 出卖链接的网站
- 购买链接的网站
5 结果展现
网页经历了抓取建库,参与了排序计算,最终展现在搜索引擎用户面前,目前在搜索左侧结果展现形式很多,如:凤巢、品牌专区、自然结果等,一条自然结果怎样才能获得更多的点击,是站长要考虑的重要一环。
目前,自然结果里又分为两类,第一个是结构化展现,目前覆盖80%的搜索需求,即80%的关键词下会出现这种复杂的展现样式;第二个即一段摘要式展现,最原始的展现方式,只有一个标题、两行摘要、部分链接等;
很明显,结构化展现向用户明确传递信息,直击用户需求通电,获得更好的点击,目前百度结构化展现有几种样式:
- 通用回答:提取答案,方便搜索用户参考
- 下载类展示
- 时间戳
- 在线文档
- 原创标记
- 配图
那么站长可以通过什么途径获得结构化展现呢?
- 参与原创星火计划
- 结构化数据提交工具
- 结构化数据标注工具
- 搜索结果配图