360搜索的百亿级网页搜索引擎的架构设计与实现


360搜索的百亿级网页搜索引擎的架构设计与实现

文章插图

背景360搜索是360的重要产品,目前拥有上万台服务器,每日抓取网页数量高达十亿,引擎索引的优质网页数量超过数百亿 。
360搜索技术团队通过本文,为大家介绍一下,如此强大的搜索引擎是如何设计的,涉及了哪些关键技术点 。
360搜索概况
360搜索的百亿级网页搜索引擎的架构设计与实现

文章插图
 
目前360搜索每日抓取的网页数量高达十亿,已经收录的网页基本上是万亿级别的网页集合,实际可检索的网页是在一个百亿级别的网页集合里 。
目前360搜索的单日流量是亿级pv 。我们目前的在线、离线机群有几万台服务器来维护这么大量级的计算 。
主要内容本文的分享主要会侧重于百亿级网站搜索引擎架构的一些核心模块的理论设计 。本次分享内容分为以下四个模块:
  1. 如何设计搜索引擎
  2. 百亿级网页计算关键技术
  3. 网页索引组织模式
  4. 网页检索和相关性
01 如何设计搜索引擎首先从如何设计一个搜索引擎讲起 。
基础检索
一个用户请求过来之后,整个搜索引擎的工作流程大致如下:
360搜索的百亿级网页搜索引擎的架构设计与实现

文章插图
 
首先用切词组件做分词,把query分成多个word,然后多个word会从我们的倒排索引里面获取倒排拉链,在倒排拉链的基础上,会做求交计算来拿到所有命中的doc list 。拿到doc list之后,我们希望能够把优质的网页反馈给用户,这时候我们还需要做rank计算 。rank计算就是拿倒排里面的一些位置索引信息,包括在正排里面拿一些rank的属性特征信息做打分,最终会把分数比较高的Top N结果反馈用户 。当然在前端web页面展示的时候,需要从正排中提取摘要信息,展示给用户 。这就是整个的检索过程 。
基础索引
整个检索过程涉及到两个库 。第一个是正排索引,另一个是倒排索引,我这里针对这两个库给大家做一个简单的介绍 。
360搜索的百亿级网页搜索引擎的架构设计与实现

文章插图
 
什么是正排索引?我们从互联网上抓取的网页包含很多信息,包括网页头信息、标题、正文、标签等 。我们首先从网页中把文章的正文以及文章相关的特征提取出来,当然也输入一些挖掘的信息,然后做一些分词处理 。这个过程,我们是把整个的网页生成了两部分数据,第一部分就是属性,所谓属性就是针对这些网站的一些特征,比如说网站分类信息、网站rank相关信息等 。第二个是针对的正文的分词的结果 。
整个的正排索引,就是以doc为key,以属性和word列表为value的一种结构 。因为用户在检索时是以word为key来做检索的,我们希望能够把正排索引转化成一种结构,来适应用户的检索,所以我们把正排索引转化成了以word为key,以doclist为value的一种结构,这个结构能够给用户提供高效的检索 。这就是我们所谓的倒排索引 。
检索模型
上面简单地介绍了搜索引擎的工作过程及基本概念,那下面我们讲一下,站在用户检索的角度来说,如何来设计一个搜索引擎,它的检索模型是什么样的?
360搜索的百亿级网页搜索引擎的架构设计与实现

文章插图
 
第一步,query分析
首先要做的就是针对用户输入的query进行query分析 。query分析基本包涵三点:确定检索的粒度、Term属性分析、Query需求分析 。
  • 确定检索的粒度
所谓确定检索粒度,就是分词的粒度 。我们会提供标准的分词,以及短语、组合词 。针对不同的分词粒度返回的网页集合是不一样的 。标准分词粒度越小,返回的结果越多,从中拿到优质结果的能力就越低 。而短语和组合词本身就是一个精准的检索组合,相对的拿到的网页集合的质量就会高一些 。
  • Term属性分析
这一块主要是涉及到两个点 。
第一个点就是query中每一个词的term weight(权重) 。权重是用来做什么的?每一个用户的query它本身都有侧重点 。举个例子,比如“北京长城”这个query,用户输入这个词搜索的时候其实他想搜的是长城,北京只是长城的一个限定词而已,所以说在term weight计算的时候,长城是作为一个主词来推荐的 。即使query只搜长城也会返回一个符合用户预期的结果,但是如果只搜北京的话,是不可能返回用户预期的结果的 。
第二个就是term本身的一些紧密性 。紧密性代表用户输入的query的一些关联关系 。举个明显的例子,有些query是具有方向性的,比如说北京到上海的机票怎么买?多少钱?这本身是有方向性的语义 。


推荐阅读