从零开始,写一个搜索引擎 (0x01)

第零部分咱们已经列了一个提纲了,这一篇文章开始要详细说说了。git

搜索引擎基本概念

在说搜索引擎架构分层以前,咱们先肯定几个搜索引擎的概念。github

文档倒排索引正排索引索引器文档倒排索引正排索引检索器倒排索引正排索引文档字段文档索引文档索引器索引索引
索引器倒排正排检索器倒排正排文档

搜索引擎设计分层

数据库其实也是一个搜索引擎,只是数据库和搜索引擎的侧重点不太同样,搜索引擎追求的是简单,速度快,而数据库追求的是稳定和复杂逻辑对数据的处理,因此应用场景不太同样。数据库

既然知道了一个搜索引擎的基本概念,应该怎么来设计这个搜索引擎呢?json

按照通常的软件设计逻辑,若是不是很是复杂的系统,要设计一个系统,首先要设计数据结构,而后把数据结构封装到各个算法和类中,而后将各个类组合起来就完成了,因此,我设计这个引擎,是基于如下几个层次来的。数组

倒排索引正排索引倒排索引正排索引索引器检索器ElasticSearch索引索引索引json

按照上面这些个模块,一个搜索引擎,在总体架构上大约分红如下几个层次服务器

倒排索引正排索引逆向索引正向索引倒排索引正排索引
Golang

下面这个图就是整个代码的大框架图,后面咱们会一个一个的来说这些东西。网络

经过这一篇文章,但愿能对搜索引擎有个初步的了解了,后面我会一个一个模块一个一个技术点的来拆分一下这个搜索引擎。数据结构

接下来的文章会开始介绍搜索引擎的底层技术了,倒排索引【会花比较多精力来讲倒排索引,毕竟这是核心的核心】,正排索引【这个简单,就是数组】,在介绍的时候会有几篇文章介绍实现倒排索引技术须要的一些算法和数据结构。

github

代码结构以下,再说一遍,代码量不大,结构也很是简单,虽然我写的代码注释很少,可是没有使用任何高级功能,闭包都没有,直接看没任何难度。

欢迎你们扫描一下下面的微信公众号订阅,首先会在这里发出来:)