通用搜索引擎背后的技术点( 二 )

  • 内容处理模块
    负责将网络爬虫下载的页面进行内容解析、内容清洗、主体抽取、建立索引、链接分析、反作弊等环节 。
  • 内容存储模块
    存储模块是搜索引擎的坚强后盾,将抓取的原始网页、处理后的中间结果等等进行存储,这个存储规模也是非常大的,可能需要几万台机器 。
  • 用户解析模块
    用户模块负责接收用户的查询词、分词、同义词转换、语义理解等等,去揣摩用户的真实意图、查询重点才能返回正确的结果 。
  • 内容排序模块
    结合用户模块解析的查询词和内容索引生成用户查询结果,并对页面进行排序,是搜索引擎比较核心的部分 。
  • 接下来,我们将粗浅地介绍几个模块的基本内容和技术点 。
    通用搜索引擎背后的技术点

    文章插图
     
    网络爬虫模块简介网络爬虫模块是通用搜索引擎非常的基础组件,一般都会采用分布式爬虫来实现,我们来看看这个搬运工是如何实现海量网页发掘的:
    通用搜索引擎背后的技术点

    文章插图
    网络爬虫的基本流程:
    • 将热门站点的优质URL作为种子,放到待抓取的URL队列中
    • 读取待抓取URL获取地址进行下载
    • 将下载的网页内容进行解析,将网页存储到hbase/hdfs等,并提取网页中存在的其他URL
    • 发掘到新的URL进行去重,如果是未抓取的则放到抓取队列中
    • 直到待抓取URL队列为空,完成本轮抓取
    在抓取过程中会有多种遍历策略:深度优先遍历DFS、广度优先遍历BFS、部分PageRank策略、OPIC在线页面重要性计算策略、大站优先策略等 。
    通用搜索引擎背后的技术点

    文章插图
    在工程实践中需要根据自身情况和搜索引擎特点进行选择某种策略或者多种策略组合 。
    网络爬虫需要遵循Robots协议(网络爬虫排除标准),这是网络爬虫和站点之间的君子协定,站点通过协议告诉网络爬虫哪些可以抓哪些不可以 。
    网络爬虫同时需要考虑抓取频率,防止给站点造成过重负担,总之,搜索引擎的网络爬虫需要是个谦谦君子 。
    通用搜索引擎背后的技术点

    文章插图
     
    网页内容处理模块爬虫模块将网页内容存储之后,网页内存处理模块开始解析网页内容,主要工作包括:数据清洗、网页内容分词、建立正排索引、建立倒排索引等 。
    通用搜索引擎背后的技术点

    文章插图
     
    5.1 数据清洗一般来说,网页中除了具体内容还会有很多无关的东西,比如html标签、推广等,这些在实际搜索引擎中都是无用的 。
    通用搜索引擎背后的技术点

    文章插图
    内容处理模块会将无用数据、标签清洗掉,为后续的分词做准备 。
     
    5.2 中文分词将清洗完成的内容进行分词提取关键词,比如一个网页内容有1000字,分词之后大约有50个词,相当于提取了网页的主干,并且会对标题、摘要、正文等不同部分的内容做不同权重处理 。
    分词过程中会剔除停用词、虚词等,比如"的、得、地"等,从而极力还原网页的主干内容 。
    我们用在线网页分词工具和真实网页来模拟下这个过程:
    网页分词在线工具:http://www.78901.net/fenci/
    抓取网页:https://tech.huanqiu.com/article/3zMq4KbdTAA

    通用搜索引擎背后的技术点

    文章插图
    可以看到分词后可以标注词频,这些都是后续作为网页排序的重要来源,但是中文是很复杂的,因此分词算法会有很多种,常见的包括:
    • 基于字符串匹配的分词算法
    • 基于概率统计的分词算法
    • 基于语义规则的分词算法
    • 其他算法

    通用搜索引擎背后的技术点

    文章插图
     
    5.3 正排索引 
    假定我们将每个网页进行唯一编号docid,经过前面的分词一个网页将被分成不同权重的多个实体词 。
    所谓正排就是根据docid可以拿到属于该网页的所有内容,是一个符合我们思维的正向过程,相对而言会有倒排索引 。
    我们以一篇《隐秘的角落》剧情简介的页面为例,模拟分词情况,大致如下(本分词结果纯属脑补,以实际为准):


    推荐阅读