全文檢索領(lǐng)域,Elasticsearch 應(yīng)該是當(dāng)之無愧的大佬了,當(dāng)對(duì)與一些小的項(xiàng)目來說還是過于厚重了,不想用 Elasticsearch。只好搜尋其他能用的項(xiàng)目。目前自己的網(wǎng)站正好用 golang 來重后臺(tái),搜尋一下 go 語言有哪些可以用的開源項(xiàng)目,剛好看到一篇文章。轉(zhuǎn)載記錄一下。
先安利一個(gè) Go 語言開發(fā)的搜索引擎 bleve,目前看來這應(yīng)該是 Go 語言開發(fā)的搜索引擎里面最有潛力,或者說最不像玩具的搜索引擎。
簡(jiǎn)單試用了一下體驗(yàn)還可以,并試探性的提了一個(gè)關(guān)于打版本標(biāo)簽的 issue ,作者的回復(fù)響應(yīng)速度也很快。
網(wǎng)上搜的資料上顯示 bleve 是由 CouchBase 團(tuán)隊(duì)打造出來的。
但是我比較不理解的是為什么看了一下代碼提交的commit ,主要都是由作者一個(gè)人提交的代碼。
這個(gè)比較費(fèi)解。
不過 Anyway,這個(gè)項(xiàng)目對(duì)于 Go 社區(qū)來說是個(gè)好消息。
也希望這個(gè)項(xiàng)目能發(fā)展越來越好,我也已經(jīng) Watch 了 bleve,希望之后能有所貢獻(xiàn)。
『轉(zhuǎn)入正題』
有朋友在 gojieba 的 issue 里面提到希望把 gojieba 集成到 bleve 中作為中文分詞的插件。
所以趁這個(gè)清明假期把 gojieba/bleve 模塊完成了。
具體的用法非常簡(jiǎn)單明了,在 gojieba 的 README.md 里面有說明。
bleve 的插件模塊支持的很好,很容易就無縫集成進(jìn)去。
而且很靈活,主要是兩個(gè)主要的模塊 Tokenizer, Analyzer .
前者是后者的子集。
前者負(fù)責(zé)分詞,但是其實(shí)搜索引擎分詞其實(shí)其中的一個(gè)重要環(huán)節(jié)而已。
去停用詞,大小寫轉(zhuǎn)換等,分詞前分詞后,都有不少功夫需要做。
目前的 gojieba/bleve 只是最簡(jiǎn)單的 Analyzer ,
分詞也是使用了最簡(jiǎn)單的最大概率法,后面應(yīng)該會(huì)改進(jìn)成 CutForSearch 模式,進(jìn)行更細(xì)粒度的分詞提高召回率。
后續(xù)還有很多調(diào)優(yōu)。
與此同時(shí),也寫了一個(gè)使用 bleve 和 gojieba 對(duì) jekyll 博文進(jìn)行索引和搜索的示例代碼: blogsearch
很輕松就跑起來了。
當(dāng)然目前的代碼都很 rush 很粗糙,但是或許之后在空閑的時(shí)間會(huì)針對(duì)博客系統(tǒng)做搜索引擎的集成,起碼在我的博客 yanyiwu.com 里面可以試試。
原文地址:http://yanyiwu.com/work/2016/04/04/bleve-gojieba.html