00:00
哈喽,大家好,这里是中国码农老鱼皮,今天给大家分享一点有趣的技术知识。这个前两天啊,我想上网买包牙签,于是就打开了搜索网站,结果呢,我搜到的第一条内容竟然不是我们传统拿来剔牙的牙签,而是搜出来了一位明星叫无牙签。我是真没有想到啊,买牙签都能吃到瓜,你看这个前台又细又炸。我关心的问题是,为什么我搜索牙签时搜出来的并不是用的牙签,而是老吴呢?现在的搜索网站做的越来越好,也越来越方便灵活了,所以我估计很多同学都不会思考这样一个问题了,那作为一名程序员,我觉得有必要花几分钟的时间给大家科普一下搜索引擎的工作原理,看看他是如何帮助我们快速的在毫秒之间从几亿的网站中精准的找到智证牙签的。一般来讲,搜索引擎的工作流程包括数据抓取、数据处理和数据查询三个部分,下面我就用牙签的例子帮助大家理解。
01:00
整个过程首先是数据抓取。用户搜索到的网站内容归根结底是来源于存储网页的数据库的,那这些数据从哪里来呢?肯定不可能人工一个一个的去找网页,然后塞到数据库里,对吧?更多的是交给机器,按照一定的规则来自动抓取。我们把负责数据抓取的东西叫做spider蜘蛛。一般每家的搜索引擎都会培育自己的蜘蛛,各家的蜘蛛原理基本相似,但也都有一些特殊的行为。蜘蛛是怎么工作的呢?我们知道蜘蛛喜欢塔网,对吧?其实整个互联网就是一张大网,这张网由多个网页、多个节点组成,那我们只要启动这个网页,蜘蛛给他一根线,它就能够以这根线作为入口,通过页面之间的超链接关系,顺着网不断发现新的网址,一级一级的爬下去,小蜘蛛的目标就是尽最大的可能抓到更多有价值的网页。比如说现在有位作者写了一篇无牙签的文章,发到了某个写作平台,那网页蜘蛛呢,他就可以先进入这个写作平台,然后顺着这个写作平台呢。
02:00
发现这篇无鸦签的文章,抓取到的链接呢,将塞到一个专门存储网页的数据库中,集中的管理。对于一个非常非常大型的搜索引擎,你在设计数据抓取系统的时候要考虑到很多的问题,比如说网页的重复和失效,当一个网页发生更新时,我们也要把已经存到数据库中的网页进行一个更新,尽量不要让用户搜到过时或者说多余的内容。还有一些其他问题,比如说怎么提高抓取网站的质量,就尽量少抓那些不良信息、垃圾网告网站,还有如何保证抓取的友好性,不要说你这个蜘蛛太大,然后访问网站太频繁,把整这网站给搞挂了。还有就是怎么能尽可能多的抓到一些网站,防止一些网站它自己单独起一张网,和现有的大网隔离你碰不到,除此之外还有很多其他的问题,比如说抓取的协议、算法、策略,还有抓取失败了应该怎么处理等等都要考虑,所以一个抓取系统的宏观流程没有我们想象的那么简单,那假如说我们自己做了一个网站,肯定也希望其他同学能搜到,对吧?那么最。
03:00
变的一点就是先要让蜘蛛抓到爬到你的网站,并且要多抓,这就需要我们了解搜索引擎蜘蛛的抓取规则,比如某度搜索引擎,它其实是根据四个指标来确定网站的抓取次数和频率,比如你的网站更新越快,我抓的越多,你的网站质量越高,评价越好,我抓的越多,还有你的网站要保持能够正常访问,还有就是你的站点评价,一般会根据一个算法自动的对你的网站进行一个打分,分数越高,收录度越高。那在蜘蛛抓到网页,把网页存到数据库之后,并不是说用户直接从这个数据库中搜索,假如我要搜老吴牙签,那你这网页数据库中可能存了几亿个网站,包含牙签的网站可能都有几十、几百万个,我怎么知道哪根牙签是老吴的呢啊,虽然你一条一条搜传的也能搜到,但这样效率实在太低了,用户肯定是等不了的。那搜索引擎是怎么做的呢?他先会对这些乱七八糟的网页内容进行一个页面分析,提取出原始页面的不同部分进行标记,比如说关键的信息,有这个标题描述、关键词等等,提取出这些信息还是不够的。
04:00
我们传统的这种顺序便利的搜索算法其实是无法满足毫秒级的查询需求的,那我们不妨换个思路,假如说我们事先知道用户可能要搜哪些关键词,他要搜的关键词包含在哪些页面中,那我们在搜索的时候直接匹配到这个关键词,不就可以找到对应的网站了吗?所以我们要对内容进行分词,建立这个倒排索引分词简单来说就是把一句话分成多个词汇。英文分词相对简单,你就根据空格去分就好了,但中文分词就没有那么容易,传统方法是建立一个词典,然后匹配到词典中的单词就进行一个分割,但这种方法不够精确,而且比较麻烦,所以现在基本都用到人工智能、自然语言、数理相关的技术实现这个智能分词,给大家举个例子,假如说有两个网页,第一个网页是老吴卖牙签,那么会被拆分为老吴卖牙签三个词,第二个网页标题是老吴牙签很大,那么会被拆成老吴牙签很大三个词。接下来呢,就可以利用这些分词建立倒排索引,传统的索引或者叫正向索引,就像是我们看书的时候。
05:00
后根据书的这个目录去找对应的章节,找对应的内容。而倒排索引呢?就像我们考试可能要打成什么小抄,我们事先记录好某道题的答案,它在书本的哪一页,等我们遇到这道题的时候,直接是根据这一页再去找内容就可以了。那这里演示一下,如果对上面提到的两个网页建立正向索引应该是这样的,而建立倒排索引应该是这样的。有了这样的索引之后,假如说用户他要搜索一个关键词很大,只要从倒排索引表中找到很大所在的那一行,就能看到包含这个关键词的所有的网页序号了。然后其实光有倒排索引还不足以支持用户快速搜索,在数据检索环节也是有大学问的,比如我们搜索老吴不是牙签,我们应该只能搜到完完整整包含这六个字的内容,但为什么我却能搜到无牙签呢?其实搜索引擎呢,它会先对用户查询的内容进行一个分词,和建道开索引的时候一样,比如我们搜老吴不是牙签,它会分成三个词,老吴不是牙签,接下来呢,会分别在事先我们建好的道开。
06:00
同一表中去搜索这三个词,找到他们对应的网页内容,可以取交集,也可以取并集,得到一个网站的候选集合。接下来呢,要对候选集合中的每一个网页进行相关度评价,简单的说就是打分计算用户的搜索和网站的实际内容到底有多像。一种很常见的打分算法是t fidf,我们要对用户搜索文本的每一个关键词都进行这样的打分,最后呢,再把每一个词的权重进行加权累加,计算出每个候选网页的最终得分,这会影响网页最终展示的顺序。计算完网页的得分后呢,通常我们还要再做一遍过滤。把一些失效的网页,重复的网页,还有一些你懂得的网页统统给过滤掉,这就是为什么有些东西你搜不到。经过了上面一系列的步骤之后呢?假设我们最后得到三个网页,应该把哪个网页放到第一位呢?梦回开头的问题,为什么我要买包牙签,我搜牙签的时候第一个抽出来的却是老吴呢?这个问题取决于最终排序,现在一般都是用机器学习算法来辅助完成,结合上面的一些相关度的信息,网站的质量,网站的热度,网站的时效性等等,将最能满足用户需求的结果靠前展示。那这个老吴啊,是近期的爆款内容,这个时效性很高,这个热度很高,这个牙签的质量也很好,很细,所以它的权重就相对高了一些。展示到了最上面,那有同学问了,了解是什么?搜索排序规则有什么用?假设说你做了一个网站,肯定不仅希望它能被用户搜到,而且希望第一个搜出来的就是你,对吧?这些内容结合起来呢,就是我们常说的SEO搜索引擎优化,这一块的学问其实是非常大的。我自己的编程导航网站也。
07:34
是费了好大的功夫才终于做到了各大搜索引擎的排名第一,所以这里送给大家一些搜索引擎优化的视频教程吧,欢迎大家关注我的原创公众号程序员皮,回复SEO就能拿到了,后面我会再结合自己的网站给大家分享一些实战SEO的技巧。好了,我是于皮,一名在变突也希望带大家变强的程序up主,持续分享有序实用的编程技术知识,还有我学编程进大厂的经验方法,求职指南。感谢大家的观看,有帮助的话希望可以给视频一个点赞收藏投币三连,支持我们,下期再见。
我来说两句