开源,分布式,简单高效的全文本搜索引擎。

简体中文

特征
高效的索引和搜索(1M博客500M数据28秒索引完成,1.65 ms搜索响应时间,19K搜索QPS)

支持逻辑搜索

支持中文分词(使用gse分词包并发词,速度27MB / s)

支持文本中关键字的计算接近距离(令牌接近)

支持计算BM25相关

支持自定义评分字段和评分规则

支持在线添加,删除索引

支持心跳

支持多个持久存储

支持分布式索引和搜索

可以实现分布式索引和搜索

查看分词规则

要求
转到版本> = 1.8

依存关系
Riot使用go模块或dep来管理依赖项。

安装/更新
go get -u github.com/go-ego/riot
建造工具
go get -u github.com/go-ego/re
暴动
创建一个新的防暴应用程序

$ re riot my-riotapp
重新运行
要运行我们刚刚创建的应用程序,您可以导航到应用程序文件夹并执行:

$ cd my-riotapp && re run
用法:
看一个例子
包主

导入(
“日志”

“ github.com/go-ego/riot”
“ github.com/go-ego/riot/types”

var(
//搜索者是协程安全
搜索者 =防暴。引擎{}

func main(){
//初始化
搜索器。Init(types。EngineOpts {
//使用:4,4,
NotUseGse:true,
})
推迟 搜索者。关闭()

文本 :=  “谷歌正在尝试用虚拟现实广告”
文本1  :=  `谷歌无意中按下蓝牙更新主页
扬声器early`
文本2  :=  `谷歌正在测试另一个搜索结果与布局
的圆形卡,新的颜色,和4个神秘的彩色圆点再来一次

//将文档添加到索引,docId从1
searcher开始。索引(“ 1”,类型。DocData {内容:文本})
搜索器。索引(“ 2”,类型。DocData { Content:text1 },false)
搜索器。IndexDoc(“ 3”,类型。DocData { Content:text2 },true)

//等待索引刷新
搜索器。Flush()
 // engine.FlushIndex()

//搜索输出格式可在types.SearchResp结构
日志中找到。打印(搜索器。搜索(类型。SearchReq {文本:“谷歌测试” }))

}
这很简单!

使用默认引擎:
包主

导入(
“日志”

“ github.com/go-ego/riot”
“ github.com/go-ego/riot/types”

var(
searcher = riot。新增(“ zh”)

func main(){
data :=类型。DocData {内容:

我想知道如何,我想知道为什么
        ,我想知道它们在哪里
}
data1 :=类型。DocData {内容:“所以,你好,再见” }
data2 :=类型。DocData {内容:“没有理由” }

搜索者。索引(“ 1”,数据)
搜索器。索引(“ 2”,data1)
搜索器。索引(“ 3”,data2)
搜索器。冲洗()

req  :=类型。SearchReq {文本:“你好” }
 search  := 搜索者。搜索(req)
日志。Println(“搜索...”,搜索)

}