前言
最近在看《自制搜索引擎》这本书,自制xxx系列丛书有很多,之前看过自制操作系统这本书,但是后来感觉有点难懂,确实看不下去了。但是自制系列丛书对于理解比较生涩的原理还是非常有帮助,如果你还在学生时代又对这些底层的原理感兴趣不妨多看看。
接触《自制搜索引擎》这本书纯属意外,开始是因为我在快手实习期间用到了倒排索引这个数据结构,后来了解到搜索引擎的数据就是通过倒排索引来保存的,所以一下子就对搜索引擎的底层原理来了兴趣。通过豆瓣了解到这本书,索性买来看看。
首先说这本书值得一买,里面有原理也有实例,整体上通俗易懂,比较容易理解,只要会一些c语言还有了解一些基本的计算机知识就可以看看。
倒排索引
搜索引擎最基本的是要有数据,数据哪里来,通过爬虫获取,爬虫也是非常有意思的,感兴趣的话可以学学Python爬虫,这本书里面没有这部分,书里面讲的主要是讲的如何构建索引。那数据有了,存哪里,怎么存呢,如何保证数据能够被高效的查找,这是一个问题。拿一篇文章举例,我们一般的想法就是爬虫爬取了一篇文章,直接存到数据库就好了。但是这样会造成一个问题就是在搜索的时候需要从头到尾的查找一遍,时间上会非常慢。这种存储的方式就叫做正排索引,就是把文章标题或者文章ID作为键,文章内容作为值得存储,我们如果知道了标题或者ID可以很快的查找到文章的信息。但是如果想查找某一个关键字就需要遍历所有文章,时间复杂度很大。所以就有了倒排索引,倒排索引就是把某个关键字作为键,而文章ID作为值。举例来说,某个关键字:百度,然后数据库就把百度作为键,值就是出现这个关键字的文章的列表。如果某个人想搜索百度,就可以快速的把出现百度的文章找出来,然后根据一系列的排序算法将文章或网页展示出来。倒排索引的具体实例可以看这篇文章。倒排索引
搜索引擎
一个简单的搜索引擎其实是由几个模块构成的。主要的模块有索引构建器,索引管理器,文章管理器,索引检索器等部分构成。
最主要的还是要构建倒排索引。对于某个文档,要先进行分词,分词又有好多种方法,可以两个三个字等也可以以词语分词。然后根据这些词语构建整个的倒排索引。