GoC/C++Go

从公司项目衍生出了一个自己的搜索引擎项目,然后有了这篇文章。

先聊聊目标吧,我希望实现一个这样的搜索引擎

Go比如价格区间过滤比如结果集中品牌数量汇总

当然,一个搜索引擎涉及的部分实在是太多了,下面几个部分不是我们的重点,也不会进行深入的实现

  • 没有爬虫部分,搜索引擎的爬虫又是一个另外的话题了,也可以写一个很复杂的系统出来,所以我们这里不涉及爬虫的部分
  • 不涉及算法的部分,所谓算法部分就是排序算法,各种相关度计算,这也是一个另外的话题了,等这一系列文章结束以后再来说说排序的算法,目前仅仅有的是按照TF*IDF进行基本的相关性的基本排序
  • 不涉及分词部分,分词部分也是一个单独的话题,直接实现了一个非常非常非常(重要事情说三遍)简单的中文分词器(一个函数),可以用就行了。
github

好了,下面我们开始吧,整个系列文章将分成以下几个部分来进行描述

  • 一个单机的搜索引擎的架构,包括搜索引擎的模块组成,各个模块的功能已经他们之间的关系,这个部分会对搜索引擎整体有个了解,方便后面的文章的详细描述,这一部分可能会比较短,后面到第三部分会再详细说。
  • 搜索引擎的底层技术部分,这部分比较多的内容,会分开一个一个的讲,包括倒排索引技术,正排索引技术,分词算法,MMAP技术,这些是构成一个搜索引擎必要的底层技术,会在这一部分做介绍
  • 一步一步的实现一个单机的搜索引擎,按照模块从最底层的倒排和正排索引实现一直到最上层的引擎部分的实现,这一部分如果涉及到了相应的数据结构和算法也会单独写,比如哈希表算法,B+TREE算法,BitMap算法,有些我这个引擎中没有实现的算法也会一起讲讲,比如跳表,前缀树,布隆过滤器等等。
  • 分布式部分【TODO:需要等我代码写完了才行】,包括如何进行分布式,各个机器之间如果进行同步,索引如果进行分片

代码已经在git上开源了,我会本周再整理一下就公布出来,目前就一堆代码实在没办法看。