本文转载自微信公众号《后端技术指南针》,作者指南针氪金入口。转载本文请联系后台技术指南针公众号。1.写在前面今天和小伙伴们一起学习一些通用搜索引擎的技术要点。鉴于搜索引擎的内容非常庞大,每一部分都足以写好几篇文章,所以这篇文章只是抛砖引玉,老手们还得自己动手才能深入挖掘。通过本文,您将对通用搜索引擎的基本原理和组成有更清晰的认识。认真看完,你一定会有所收获!废话少说,大家赶紧上车!2.初识搜索引擎2.1搜索引擎分类搜索引擎按使用场景和规模可以简单分为两大类:通用搜索引擎通用搜索也叫大搜,如谷歌、百度、搜狗、神马等都属于这一类。垂直搜索引擎垂直搜索,也称为垂直搜索,是特定领域的搜索,比如用QQ音乐搜索周杰伦的歌曲。虽然两类搜索引擎的数据规模和数据特征不同,但都旨在弥合用户与海量信息之间的鸿沟。2.2搜索和推荐搜索和推荐经常被拿来比较,但是两者之间有一些区别和联系。共通点从宏观上来说,搜索和推荐都是为了解决用户和信息的隔离问题,给用户有用/需要/喜欢的信息。差异搜索一般是用户根据自己的意愿触发搜索,推荐一般是系统主动推送,让用户看到可能感兴趣的信息。2.3搜索引擎评价标准我们每天都和搜索引擎打交道,对搜索引擎的评价可以简单概括为:准确性、及时性、响应速度、权威性等。换句话说,搜索引擎了解用户的真实情况寻找,并能快速准确地显示出来。还可以及时收录和展示一些热点和意想不到的信息,可以很好地赢得用户。这一目标需要搜索引擎多个模块的协同处理,是一项复杂的系统工程,并非易事。3.通用搜索引擎的总体概述3.1搜索引擎的基本流程这样,各个站点的页面就形成了一个镜像,规模为百亿/千亿。2、单纯的镜像不能直接使用,需要对每个网页的词进行分词处理,建立搜索词和网页的对应关系,这样用户搜索东西的时候,会得到很多相关的网页。3、比如“搜索隐藏的角落”可能找到100个相关网页,但是网页和搜索词的相关性一定是强还是弱,所以需要对网页进行排序,排序策略有很多种,最后将高质量的网页首先展示给用户。用户看到相关结果后,点击或跳过,搜索引擎根据用户的相关动作进行调整,实现整个闭环过程。4、为了更好地了解用户的真实目的,需要了解搜索词的意图,切分词条,替换同义词,纠正语法等,然后根据这些搜索词获取数据找到用户想要的东西。网页。比如搜索词是“老鹰”,那么它可能是一只老鹰,也可能是一支NBA球队:3.2搜索引擎的基本组成下面简单看一下基本组成和各个模块的主要功能从整体上看:网络爬虫模块搜索引擎网站中的网络爬虫是网页的搬运工,负责下载互联网上允许爬取的网页。如果把搜索引擎看成一家饭店,网络爬虫模块就是饭店的买家。内容处理模块负责对网络爬虫下载的页面进行内容分析、内容清洗、主题抽取、索引、链接分析、反作弊等链接。内容存储模块存储模块是搜索引擎的坚强后盾。它存储抓取的原始网页、处理后的中间结果等,这个存储规模也非常大,可能需要几万台机器。用户分析模块用户模块负责接收用户的查询词、分词、同义词转换、语义理解等,弄清用户的真实意图和查询重点,返回正确的结果。内容排序模块将用户模块解析出的查询词与内容索引结合起来,生成用户查询结果并对页面进行排序,是搜索引擎的核心部分。下面简单介绍几个模块的基本内容和技术要点。4.网络爬虫模块介绍网络爬虫模块是通用搜索引擎中非常基础的一个组件,一般采用分布式爬虫实现。来看看这个搬运工是如何实现海量网页发现的:网络爬虫的基本流程:将站点的优质URL作为种子,放入待抓取的URL队列中,读取URL被爬取,获取地址并下载,解析下载的网页内容,将网页存入hbase/hdfs等,提取网页URL中存在的其他信息发现新的URL进行去重。如果没有被抓取,就会被放入抓取队列,直到待抓取的URL队列为空。完成本轮爬取后,在爬取过程中会出现多种遍历策略:深度优先遍历DFS、广度优先遍历BFS、部分PageRank策略、OPIC在线页面重要性计算策略、大站优先策略等。在工程实践中,需要根据自身情况和搜索引擎的特点,选择某种策略或者多种策略的组合。网络爬虫需要遵循Robots协议(网络爬虫排除标准),这是网络爬虫与站点之间的君子协议,站点通过协议告诉网络爬虫什么可以抓,什么不能抓。同时,网络爬虫需要考虑爬取的频率,以防止网站负担过重。简而言之,搜索引擎的网络爬虫需要适度。5、网页内容处理模块爬虫模块存储网页内容后,网页内存处理模块开始对网页内容进行解析。主要工作包括:数据清洗、网页内容分词、建立正向索引、建立倒排索引等。5.1数据清洗一般来说,网页中除了具体的内容外,还有很多不相关的东西,比如html标签,promotion等,这些在实际的搜索引擎中是没有用的。内容处理模块会清理无用的数据和标签,为后续的分词做准备。5.2中文分词对清洗后的内容进行分词,提取关键词。比如一个网页有1000个词,分词后大概有50个词,相当于抽取了网页的主体,将标题、摘要、正文等不同部分的内容分开。内容以不同的权重处理。在分词过程中,会剔除停用词和虚词,如“得、得、处”等,尽可能还原网页的主要内容。我们使用在线网页分词工具和真实网页来模拟这个过程:网页分词在线工具:http://www.78901.net/fenci/抓取网页:https://tech.huanqiu.com/article/3zMq4KbdTAA可以看到分词后,可以标注词频,以后作为网页排名的重要来源,但是中文很复杂,所以分词算法很多,常见的有:基于字符串匹配的分词算法基于概率统计的分词算法基于语义规则的分词算法其他算法5.3正向索引假设我们给每个网页docid唯一编号,经过前面的分词,一个网页会被分成多个实体不同权重的单词。所谓正向排序,就是根据docid可以得到属于网页的所有内容,这是符合我们思维的正向过程,相对来说,会出现倒排索引。下面以?的一页剧情介绍为例,模拟分词,大致如下(分词结果纯属脑补,以实际为准):5.4倒排索引如果我们对10000个网页进行分词,其中包含一些公共搜索词:微山湖、智取威虎山、三十而立、隐秘的角落等。因此,我们在总结后建立搜索词->网页之间的映射关系。然后对于搜索词“隐藏的角落”,出现了很多网页,倒排索引相当于一个词可以拉出多少篇文章的过程。就像我们一提到美食,就会想到:火锅、烧烤、烤鸭、炒菜等等,都是一个由点到面的过程。这个逆向过程在搜索引擎中非常重要。5.5本章小结内容处理模块对抓取的网页进行清洗,将新的URL推进到爬虫模块,对内容进行分词,建立正向索引和倒排索引,作为连接上一个和下一个的中间环节。特别是提到正向索引和倒排索引,从字面上看并不直观,但道理不难理解:正向索引:一个网页具体有多少关键词,特指属于网页本身的内容集合,是一个网页。倒排索引:一个搜索关键词对应多少个关联网页,即备选网页的集合,属于网页的一种。6.网页排名和用户模块6.1网页排名的必要性由于存储的网页数以百亿计,一个搜索词可能涉及到几万、几十万甚至更多的相关网页。网页排名需要综合考虑:相关性、权威性、及时性、丰富性等方面。搜索引擎应该向用户展示质量高、相关性强的网页,并放在最前面的位置,否则搜索效果很差,用户也不会买账。其实也是这样的。例如,搜索引擎返回10页结果,每页10项,汇总100项。一般用户点击1-3页后就不会再点击页面了。因此,排序后的标题内容对于搜索结果很重要。我们仍然以搜索“隐藏的角落”为例。百度一共返回了10个页面,其中1-2个页面的内容是强相关的,是比较好的搜索结果:6.2网页排名的常用策略网页排序策略是一个不断优化改进的演进过程,再来看看排序策略:根据词频和位置权重排序这是早期搜索引擎经常使用的一种方法,比较简单但是效果还不错。简单来说就是以关键词在网页中出现的频率和位置作为排序的依据,因为一般认为搜索词出现的越多,位置越重要,相关性就越好网页排名越高。词频不是简单的计算次数。需要一个全局的概念来判断关键词的相对频率。这就是我们要说的TF-IDF逆文档频率。我们来看看百度百科的解释:TF-IDF(termfrequency-inversedocumentfrequency)是一种常用的信息检索和数据挖掘的加权技术。TF是TermFrequency,IDF是InverseDocumentFrequency。TF-IDF是一种统计方法,用于评估一个词对文档集或语料库中文档的重要性。一个词的重要性与其在文档中出现的次数成正比,但与其在语料库中出现的频率成反比。举个例子:“dinner”这个词在网页中出现了10次,虽然次数很多,但是“dinner”这个词太常见了,因为它出现在其他很多网页中,所以搜索词“的重要性”晚餐”相对减少。基于链接分析的排序链接分析排序认为:一个网页被其他网页引用的次数越多或被引用的权威网页越多,该网页的质量就越高。基于链接分析的排序算法有很多,其中最著名的PageRank算法被Google广泛采用,是其核心排序算法。我们先看一下PageRank算法的基本思想:一个网页的重要性是通过PageRank值来衡量的,体现在两个方面:引用该网页的其他网页的数量和引用该网页的其他网页的重要性引用这一页。假设一个网页A被另一个网页B引用,网页B将PageRank值赋给网页B引用的网页,那么网页A被引用越多,其PageRank值就越高。另外,B页面越重要,它所引用的页面可以分配的PageRank值就越多,而A页面的PageRank值越高,它就越重要。其实这个算法说起来很简单:比如你写了公众号,被大V转发就相当于引用了。其他公众号转发越多,您的公众号内容质量就越高。PageRank算法也存在一定的问题,比如对新页面不友好,新页面暂时没有被大量引用,所以PageRank值很低,PageRank算法强调的是引用关系网页,可能对网页本身的主题内容不够重视,这就是所谓的主题漂移问题。与PageRank算法类似,还有一些其他算法可以弥补topic关联问题,包括:HillTop算法、Topic-SensitivePageRank算法、HITS算法等,本文不再展开。6.3网页反作弊和SEO搜索引擎也有第28条原则。头部的网页占据了大量的点击流量,这也意味着巨大的商业价值。这里提到SEO,我们先看看百度百科对SEO的定义:SearchEngineOptimization也叫SEO,即SearchEngineOptimization,是一种通过分析搜索引擎的排名规则来了解各种搜索引擎如何进行搜索的方法.,如何抓取互联网页面,如何确定特定关键字的搜索结果排名技术。搜索引擎利用容易被搜索和引用的手段,有针对性地优化网站,提高网站在搜索引擎中的自然排名,吸引更多的用户访问网站,增加网站的访问量,并提高网站的销售能力和宣传能力,提升网站的品牌效应。道高一尺,魔高一尺。只有魔法才能战胜魔法。网页反作弊是搜索引擎需要解决的一个重要问题。常见的有内容反作弊、链接分析反作弊等。网页内容作弊,比如在网页内容中加入大量重复的热词,在标题/摘要等重要位置加入热词,作弊html标签等,如在没有主题的网页中加入大量“隐藏角落”热词,增加等强调性html标签。链接分析作弊建立大量相互引用的页面集合,购买高排名的好友链接等,也就是建立许多其他可以指向自己网页的网页,从而形成作弊引用链。6.4理解用户搜索意图用户模块直接与用户交互,接收用户的搜索词,对于准确理解用户的搜索意图非常重要。事实上,用户输入是多种多样的、口语化的,甚至还有拼写错误。不同背景的用户对同一个搜索词的需求不同,使用无争议搜索词的目的也不同。搜索词是:DeliciousKungPaoChicken这个搜索词质量比较高,但是还不清楚你是不是想找一家吃宫保鸡丁的餐厅?或者您正在寻找宫保鸡丁的食谱?或者你在找宫保鸡丁?历史渊源?或者宫保鸡丁的相关评价?所以会有很多情况。搜索词是:你觉得我中午迟到了?口语化的搜索词,有错别字的,可能会涉及到纠字、同义词转换等,才能找到准确的搜索词,进而明确搜索意图,回忆网页。七、全文小结搜索引擎是一个非常复杂的系统工程,涉及到很多算法和工程实现。本文旨在和大家一起简单梳理一下搜索引擎的基本组成和运行原理。算得上是一篇科普文章。做好搜索引擎中的每一个模块并不容易,也是互联网产品中技术含金量的典型代表。深挖一个模块,受益匪浅。
