Riot Search 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Riot Search 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
Riot Search 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
Riot Search 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
Riot Search 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 Apache
开发语言 Google Go 查看源码 »
操作系统 跨平台
软件类型 开源软件
所属分类 程序开发搜索引擎
开源组织
地区 国产
投 递 者 vz
适用人群 未知
收录时间 2017-10-22

软件简介

riot 是一个分布式全文搜索引擎, 采用 Go 语言开发。

功能特性:

  • 高效索引和搜索(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

Requirements

需要 Go 版本至少 1.8

Dependencies

Riot 使用 go module 或 dep 管理依赖.

Build-tools

go get -u github.com/go-ego/re 

re riot

创建 riot 项目

$ re riot my-riotapp

re run

运行我们创建的 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)
}
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (3)

加载中
不能进行office文档检索
03/16 20:55
回复
举报
内存占用怎么样?
2020/12/14 06:10
回复
举报
这个和wukong有啥区别
2017/10/24 01:30
回复
举报
更多评论
发表了资讯
2017/11/21 23:41

riot search v0.10.0 发布, 优化引擎和分词等

Riot v0.10.0 Danube River 发布了,这是一个 Go 实现的开源、分布式、简单高效的搜索引擎。 主要变更: [NEW] 增加 heartbeat [NEW] Add go dependency package to vendor [NEW] 增加 codecov [NEW] Add context cancel [NEW] 更新 gse 和 support Japanese [NEW] 更新 gse 更新加载字典方法增加默认字典 增加多个字典兼容不同语言 [NEW] 更新 gse 和分词规则并添加相应文档 [NEW] 增加获取 engine tokens 方法 [NEW] 增加更多...

2
10
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
暂无内容
3 评论
97 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部