Golang

用Golang写一个搜索引擎 (0x01)--- 基本概念

2016-05-10  本文已影响210人  吴YH坚

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

搜索引擎基本概念

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

好了,上面就是搜索引擎的最基本的概念,简单的说就是索引器吧文档变成倒排正排文件,然后检索器通过倒排正排文件还原文档的过程。

搜索引擎设计分层

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

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

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

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

在实现的时候,为了尽量简单,每个模块基本上都是一个文件来实现的,用了Golang以后,代码写起来也自由起来了,只要清晰就行,所以整个引擎下来,代码量其实不是很大。

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

整体分层.png

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

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

代码托管在github上,地址是https://github.com/wyh267/FalconEngine,代码还在不断更新中,目前代码量,去掉单元测试文件,大约是6500行,因为是想到哪写到哪,有些函数也没有用,所以还有优化空间,也希望大家提交你的patch,后面讲的时候可以对照代码看看。

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

代码结构.png
上一篇 下一篇

猜你喜欢

热点阅读