写点什么

从零开始实现 Go 搜索引擎(一)

作者:geange
  • 2023-07-19
    广东
  • 本文字数:847 字

    阅读完需:约 3 分钟

从零开始实现Go搜索引擎(一)

这是我关于这个项目https://github.com/geange/lucene-go的第一篇文章。


之前尝试过写一些博客,后面都放弃了,原因就是我把很多业余的时间投入到这个项目的开发中。


这个项目的起因是看了程序员给老婆写菜谱的故事。 在了解了一些搜索基本原理后,简单得出一个结论:这个东西,实现一个 golang 版本的 lucene 可行性非常高。


起初,一切都非常的顺利。而且之前就有大佬已经实现了 go 版本的 lucene:balzaczyy/golucene。简单阅读一部分源码后,觉得一部分虽然有点看不懂,但是觉得难度不大。但由于这个项目支持的 lucene 版本较低,而且我对 lucene 源码其实并不熟悉,如果在此基础进行进一步开发,难度并不比重新实现更加简单。


因此我选择了一条更简单的道路,我决定使用 Go 从零开始实现一个搜索库。


打开 lucene 官网,原本我选择的版本是 9.2。但是由于后续 lucene 的持续更新,我决定


我下载了 lucene 8.11.2 的源码,并在比较短的时间内实现了core/store包的内容(主要是一些文件相关的 IO 操作),更加坚定了我的想法:这个事情很简单。


不要等理解这个东西到底是个什么东西的时候再去动手,要在实践的过程中去理解它。


开发到core/index包时,问题开始变得复杂,但是又不是很复杂,勉强还是能够理解 lucene 的代码设计和实现的。


当我实现了 fst 的算法时,问题变得更加严重了。我按照着 java 的代码实现,一点点去 DEBUG,花了我 1 个多月的时间,逐渐实现了 fst 的算法。这大大鼓舞了我。因为 fst 算法是 lucene 中的一个核心数据结构,用于存储大容量的 KV 数据。但是正是由于 fst 的实现,导致我对完成这个项目有了莫名其妙的无比强大的自信。


正是因为前期遇到一些比较简单的事情,导致我严重误判了这个项目的复杂程度。


直到现在,这个项目也没有达到一个完全可用的状态。但因为这个项目的部分的 demo 已经能够运行起来,所以我也有时间去写一下文章来记录这个项目开发的事情,如果有可能,也可以帮忙点个 star 鼓励下我,或者等项目最终完成再点也可以。


geange/lucene-go: A Go port of Apache Lucene 8.11.2 (github.com)

发布于: 刚刚阅读数: 4
用户头像

geange

关注

还未添加个人签名 2018-05-26 加入

还未添加个人简介

评论

发布
暂无评论
从零开始实现Go搜索引擎(一)_搜索引擎_geange_InfoQ写作社区