由无法查看粉丝列表想到的搜索引擎原理

今天想看看粉丝列表最前面的人是谁,发现不行。

震惊之余,问了下客服,被告知说是只能查看前50页。

虽然有些遗憾,但由此联想到另一个关于搜索的问题。
不知道大家有没有思考过这样一个问题:我们使用搜索引擎搜索关键词的时候,为什么能在半秒内搜出整个互联网的相关信息呢?搜索Bilibili,为什么一瞬间就能找到143,000,000条结果?

难道是谷歌服务器在一瞬间把世界上所有的网页都匹配了一下文字吗?为了满足你的私利,竟要在短短半秒内找遍上千亿网页?

想到这儿,我不禁感叹百度真是垃圾现代科学真厉害。但显然,稍加思考就会发现,翻书式的正向查找是不现实的。就算谷歌整个公司的服务器能满足你一个人,那全球几十亿人同时使用搜索引擎,就是一百个谷歌服务器它也不够用啊。

那么搜索引擎是怎么实现的呢?实际上它用的不是正向查找,而是字典式的逆向存储,我不存网页本身,我存单词!
我不存每个网页的每一行都有什么词,而是存某个单词在哪个文章的第几行第几个出现了。如图一所示。我们把每个网页出现过什么字都找出来,把它们的网页编号、位置都加入对应文字的列表即可。


这样的话,好处是显而易见的:
①当你输入关键词时,我只需要把这个单词对应的文章的列表返回给你,而不需要去正向查找;不管你搜什么单词,我返回结果的时间都是差不多的,都只是把这个单词对应的列表给你而已,无非是列表长短的区别。

②网页是无限的,而单词是有限的;我没办法把所有网页的原始信息都存下来,却可以穷举字典里两万个单词,这两万个单词的列表是可以维护的,只要把哪个网页的哪个位置有这个单词加在列表里即可。
因此,当你搜索关键词的时候,返回的就是这个关键词对应的存储网页的列表
当你搜索多个关键词的时候,只需要对这两个关键词的两个列表做一个与运算,把同时含有这两个关键词的网页筛选出来即可,在时间复杂度上很低。如果要是正向查找做这个事情可就惨了:先遍历所有网页,再找出同时有这两个单词的网页。

列表的顺序,就是返回结果的顺序,可以根据大量用户的点击习惯和单个用户的个性化特质来不断地修改,给不同的人呈现不同的搜索结果。这很方便,也很危险。一个是信息茧房效应,一个是根据多维数据收集对你的用户画像刻画而对你的恶意定向推送。
所以,保护好自己的信息,尽量少地填写个人资料。
