全文检索领域,Elasticsearch 应该是当之无愧的大佬了,当对与一些小的项目来说还是过于厚重了,不想用 Elasticsearch。只好搜寻其他能用的项目。目前自己的网站正好用 golang 来重后台,搜寻一下 go 语言有哪些可以用的开源项目,刚好看到一篇文章。转载记录一下。
先安利一个 Go 语言开发的搜索引擎 bleve,目前看来这应该是 Go 语言开发的搜索引擎里面最有潜力,或者说最不像玩具的搜索引擎。
简单试用了一下体验还可以,并试探性的提了一个关于打版本标签的 issue ,作者的回复响应速度也很快。
网上搜的资料上显示 bleve 是由 CouchBase 团队打造出来的。
但是我比较不理解的是为什么看了一下代码提交的commit ,主要都是由作者一个人提交的代码。
这个比较费解。
不过 Anyway,这个项目对于 Go 社区来说是个好消息。
也希望这个项目能发展越来越好,我也已经 Watch 了 bleve,希望之后能有所贡献。
『转入正题』
有朋友在 gojieba 的 issue 里面提到希望把 gojieba 集成到 bleve 中作为中文分词的插件。
所以趁这个清明假期把 gojieba/bleve 模块完成了。
具体的用法非常简单明了,在 gojieba 的 README.md 里面有说明。
bleve 的插件模块支持的很好,很容易就无缝集成进去。
而且很灵活,主要是两个主要的模块 Tokenizer, Analyzer .
前者是后者的子集。
前者负责分词,但是其实搜索引擎分词其实其中的一个重要环节而已。
去停用词,大小写转换等,分词前分词后,都有不少功夫需要做。
目前的 gojieba/bleve 只是最简单的 Analyzer ,
分词也是使用了最简单的最大概率法,后面应该会改进成 CutForSearch 模式,进行更细粒度的分词提高召回率。
后续还有很多调优。
与此同时,也写了一个使用 bleve 和 gojieba 对 jekyll 博文进行索引和搜索的示例代码: blogsearch
很轻松就跑起来了。
当然目前的代码都很 rush 很粗糙,但是或许之后在空闲的时间会针对博客系统做搜索引擎的集成,起码在我的博客 yanyiwu.com 里面可以试试。
原文地址:http://yanyiwu.com/work/2016/04/04/bleve-gojieba.html
有疑问加站长微信联系(非本文作者)