Golang项目整合Riot库实现全文搜索功能
发表时间: 2021-03-08 17:18
之前自己些的协作系统或者说是记事本项目都用的java语言编写的,因为有Lucene作为应用内搜索的首选,所以也就无需担心。
前两年用go语言写了一个简单的文档发布系统,还缺少全文检索的支持,一度想自己写一个简单的全文检索,奈何时间精力有限,也没时间写。最近又试图在github上找一款是不是有别人写的类似的东西,目前发现一款roit貌似满足要求。
官网地址:
https://github.com/go-ego/riot
于是根据官网的示例,我写了如下示例
main.go
package mainimport ( "encoding/json" "log" "github.com/go-ego/riot" "github.com/go-ego/riot/types")var ( searcher = riot.Engine{} //.New("zh"),参数zh指的是使用roit安装库中的字典文件这样使用的话,必须手动安装到部署目标电脑,比较不方便)func main() { searcher.Init(types.EngineOpts{ //GseDict: "zh", 指定程序目录下的文件,就不用依赖roit库中的字典文件了文件了 GseDict: "dictionary.txt", Using: 1, // 必须用这个,否则不能持久化,重新执行就是新得数据 UseStore: true, }) defer searcher.Close() data := types.DocData{Content: `I wonder how, I wonder why , I wonder where they are`} data1 := types.DocData{Content: "所以, 你好, 再见"} data2 := types.DocData{Content: "没有理由"} searcher.Index("1", data) searcher.Index("2", data1) searcher.Index("3", data2) searcher.Flush() log.Println("now index number: ", searcher.NumDocsIndexed()) // 使用了逻辑或的方式搜索,如果想使用与的方式,写成 Logic: types.Logic{Must: true} req := types.SearchReq{Text: "你好啊,where", Logic: types.Logic{Should: true}} search := searcher.Search(req) // 序列化成json方便查看结果 text, _ := json.MarshalIndent(search, "", " ") log.Println("search...", string(text))}
基本的注意点都写在了注释里了。