我们在使用搜索引擎的时候,搜索结果页面会展示搜索到的结果数目以及花费时间。比如用 Google 搜索中文“后端技术”这个词,会显示找到约 6.7 亿条结果,用时 0.45 秒。
我们知道 Google 收录了全世界几乎所有的公开网页,这是一个非常庞大的数目,那么 Google 是如何做到在如此短的时间内完成了如此庞大的数据搜索呢?
搜索引擎倒排索引
数据的搜索与查找技术是计算机软件的核心算法,这方面已有非常多的技术和实践。而对于搜索引擎来说,要对海量文档进行快速内容检索,主要使用的是倒排索引技术。
像 Google 这样一个互联网搜索引擎,首先需要通过网络爬虫获取全球的公开网页。那么搜索引擎如何知道全世界的网页都在哪里呢?
事实上,互联网一方面是将全世界的人和网络应用联系起来,另一方面,也将全世界的网页通过超链接联系起来,几乎每个网页都包含了一些其他网页的超链接,这些超链接互相链接,就让全世界的互联网构成了一个大的网络。所以,搜索引擎只需要解析这些网页,得到里面的超链接,然后继续下载这些超链接的网页,继续解析,这样就可以得到全世界的网页了。
这个过程具体是这样的。首先选择一些种子 URL,然后通过爬虫将这些 URL 对应的页面爬下来。其实,所谓的爬虫,就是发送 URL 请求,下载相应的 HTML 页面,然后将这些 Web 页面存储在自己的服务器上,并解析这些页面的 HTML 内容,当解析到网页里超链接 URL 的时候,再检查这个超链接是否已经在前面爬取过了,如果没有,就把这个超链接放到一个队列中,后面会请求这个 URL,得到对应的 HTML 页面并解析其包含的超链接……如此不断重复,就可以将全世界的 Web 页面存储到自己的服务器中。