聊聊搜索引擎背后的故事
聊聊 “吴牙签” 背后的搜索引擎技术
大家好,我是鱼皮,今天分享点有趣的技术知识。
前两天,我想上网买包牙签,于是就打开了某度搜索。
结果让我懵逼,我搜到的第一条内容竟然不是拿来剔牙的工具,而是搜出了一位明星,江湖美誉 “吴牙签”。
原来是最近的一个大瓜,你看这个签它又细又扎 ? ~
在吃瓜的同时,问题来了:为什么搜索牙签时,最先搜出来的不是传统牙签而是老吴呢?
作为一名程序员,有必要给大家科普一下互联网 搜索引擎
的工作原理,看看它是怎么帮助我们从数亿个网站中精准地把这根牙签找出来的!
搜索引擎工作原理
内容参考百度官方的搜索引擎工作原理介绍
先放一张官方的搜索引擎工作流程图:
虽然慢慢搜肯定能搜出结果,但别忘了用户可等不起!现在大家对网站的要求很高,几秒钟没搜出来大家可能就会怀疑网络了。因此搜索引擎必须要面临的挑战是:如何提高搜索网页的效率?最好是在毫秒级完成。
为了实现这点,搜索引擎首先会对乱七八糟的网页数据进行 页面分析 ,将原始页面的不同部分进行识别并标记。比如几个影响搜索的关键字段:网页的 title(标题)、keywords(关键词)、description(摘要)等。
<html>
<title>老吴卖牙签</title>
<meta name="keywords" content="娱乐,生活,很大">
<meta name="description" content="老吴卖牙签">
</html>
提取出这些信息后,仅通过传统的关系型数据库和顺序搜索算法是无法满足毫秒级查询的。那不妨换个思路。既然用户都是根据关键词搜索,那如果事先知道这些关键词存在于哪些页面中,不就能直接找到了么?即对内容进行 分词
,建立 倒排索引
。
分词就是把一句话拆分成多个单词,英文分词比较简单,就根据空格来就行。但中文分词就麻烦了,传统分词方法是建立一个词典,然后线性匹配,但这种方法成本大、且精度不高。现在基本都是 NLP(自然语言处理)、AI 分词了,包括了切词、同义词转换、同义词替换等等。
以对页面标题分词为例,比如有两个网页,第一个网页的标题是 “老吴卖牙签”,其实会被分词为 “老吴”、“卖”、“牙签”。第二个网页的标题是 “老吴牙签很大”,会被分词为 “老吴”、“牙签”、“很大”。
分词后,要根据分词结果建立 倒排索引
。
如果说 正向索引
就像书的目录,帮助我们根据页码找到对应章节;那倒排索引则像是打小抄,事先记录好题目答案所在的页码,再根据页码快速找到题目答案。
对上面的两个网页建立正向索引:
网页 id |
标题 |
内容 |
---|---|---|
1 |
老吴卖牙签 |
xxx |
2 |
老吴牙签很大 |
xxx |
建立倒排索引:
索引 id |
索引文本 |
存在于网页 id |
---|---|---|
1 |
老吴 |
1, 2 |
2 |
卖 |
1 |
3 |
牙签 |
1, 2 |
4 |
很大 |
2 |
建立并存储倒排索引后,如果用户搜索关键词 “很大”,只需要从倒排索引表中找到索引文本等于 “很大” 的那一行,取出包含该词的网页 id,就可以再根据网页 id 去正向索引中找到网页全部信息了。
数据检索
光有倒排索引还不能支持用户快速搜索,在最后的数据检索环节也有大学问。
比如为什么搜索 “老吴不是牙签”,却能搜出 “吴牙签” 呢?
明明前者没有包含后者对吧,我们常用的 like、正则之类的字符串匹配算法是查询不到结果的。
下面讲讲搜索引擎的做法。
先放一张几年前由百度搜索官方提供的数据检索流程图,大致思路是没问题的,但有些步骤的细节可能早已天差地别。
5. 排序
经过上面的步骤,我们最后得到了 3 个网页,但到底该把哪个网页放到第一位呢?
回到开头的问题:为什么搜索牙签时,最先搜出来的不是传统牙签而是老吴呢?
这个问题取决于 最终排序 ,现在一般都使用机器学习算法,结合一些信息,比如上面提到的相关度、网站的质量、热度、时效性等等,将最能满足用户需求的结果排序在最前。
而老吴是近期的爆款内容,在热度、时效性、搜索相关度上都很有优势,而且不排除有人工或推广来动态操作权重的可能。
相信讲到这里,大家也都能理解为什么搜索牙签时, “吴牙签” 被顶到首页了吧~
搜索引擎优化
那假如说你做了一个网站,肯定希望不仅其他用户能搜到,而且是要在第一条对吧。
要做到这点,首先要让蜘蛛抓到你的网页,还要重点研究搜索结果的排序机制。这些内容结合起来,就是我们常说的 SEO(搜索引擎优化)。
这一块学问很大,我自己的编程导航网站目前也做到了各搜索引擎的 排名第一 ,送给大家一些 SEO 视频教程吧。在我的博客回复 seo 即可。
后面我会再结合实际具体讲讲我做 SEO 的小技巧。
以上就是本期分享。我是鱼皮,欢迎阅读 我从 0 自学进入腾讯的编程学习、求职、考证、写书经历,不再迷茫!
点赞 还是要求一下的,祝大家都能心想事成、发大财、行大运。
![](https://kz.cx/wp-content/uploads/2021/10/Pasted-11.png)