Go Open Source, Distributed, Simple and efficient full text search engine.
-
高效索引和搜索(1M 条微博 500M 数据28秒索引完,1.65毫秒搜索响应时间,19K 搜索 QPS)
-
支持中文分词(使用 gse 分词包并发分词,速度 27MB/秒)
-
支持逻辑搜索
-
支持中文转拼音搜索(使用 gpy 中文转拼音)
-
支持计算关键词在文本中的紧邻距离(token proximity)
-
支持计算BM25相关度
-
支持多种持久存储
-
支持 heartbeat
-
支持分布式索引和搜索
-
可实现分布式索引和搜索
-
采用对商业应用友好的Apache License v2发布
go get -u github.com/go-ego/riot
需要 Go 版本至少 1.8
Riot 使用 go module 或 dep 管理依赖.
go get -u github.com/go-ego/re
创建 riot 项目
$ re riot my-riotapp
运行我们创建的 riot 项目, 你可以导航到应用程序文件夹并执行:
$ cd my-riotapp && re run
先看一个例子(来自 simplest_example.go)
package main
import (
"log"
"github.com/go-ego/riot"
"github.com/go-ego/riot/types"
)
var (
// searcher 是协程安全的
searcher = riot.Engine{}
)
func main() {
// 初始化
searcher.Init(types.EngineOpts{
Using: 3,
GseDict: "zh",
// GseDict: "your gopath"+"/src/github.com/go-ego/riot/data/dict/dictionary.txt",
})
defer searcher.Close()
text := "《复仇者联盟3:无限战争》是全片使用IMAX摄影机拍摄"
text1 := "在IMAX影院放映时"
text2 := "全片以上下扩展至IMAX 1.9:1的宽高比来呈现"
// 将文档加入索引,docId 从1开始
searcher.Index("1", types.DocData{Content: text})
searcher.Index("2", types.DocData{Content: text1}, false)
searcher.Index("3", types.DocData{Content: text2}, true)
// 等待索引刷新完毕
searcher.Flush()
// engine.FlushIndex()
// 搜索输出格式见 types.SearchResp 结构体
log.Print(searcher.Search(types.SearchReq{Text:"复仇者"}))
}
是不是很简单!
然后看看一个入门教程,教你用不到200行 Go 代码实现一个微博搜索网站。
package main
import (
"log"
"github.com/go-ego/riot"
"github.com/go-ego/riot/types"
)
var (
searcher = riot.New("zh")
)
func main() {
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.IndexDoc("3", data2)
searcher.Flush()
req := types.SearchReq{Text: "你好"}
search := searcher.Search(req)
log.Println("search...", search)
}
- 增加逻辑搜索
- 增加拼音搜索
- 增加分布式
- 分词等改进
- 增加更多 api
- 支持 heartbeat
- 修复 bug
- 删除依赖 cgo 的存储引擎, 增加 badger和 leveldb 持久化引擎
Riot is primarily distributed under the terms of the Apache License (Version 2.0), base on wukong.