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

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

搜索引擎基本概念

在说搜索引擎架构分层之前,我们先确定几个搜索引擎的概念。

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

搜索引擎设计分层

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

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

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

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

按照上面这些个模块,一个搜索引擎,在整体架构上大约分成以下几个层次

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

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

通过这一篇文章,希望能对搜索引擎有个初步的了解了,后面我会一个一个模块一个一个技术点的来拆分一下这个搜索引擎。

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

github

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

文章的更新频率会在一周3到5篇左右吧,欢迎大家扫描一下下面的微信公众号订阅,首先会在这里发出来:)