riot: 开源,分布式,简单高效的搜索引擎

您所在的位置:网站首页 php开源搜索引擎 riot: 开源,分布式,简单高效的搜索引擎

riot: 开源,分布式,简单高效的搜索引擎

2023-08-16 18:14| 来源: 网络整理| 查看: 265

Riot 搜索引擎

CircleCI Status Appveyor codecov Build Status Go Report Card GoDoc GitHub release Join the chat at https://gitter.im/go-ego/ego

Go Open Source, Distributed, Simple and efficient full text search engine.

Features

高效索引和搜索(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) } 查看更多例子 持久化的例子 逻辑搜索的例子 拼音搜索的例子 不同字典和语言例子 benchmark Riot 搜索模板, 客户端和字典 主要改进: 增加逻辑搜索  增加拼音搜索  增加分布式  分词等改进  增加更多 api 支持 heartbeat 修复 bug 删除依赖 cgo 的存储引擎, 增加 badger和 leveldb 持久化引擎 Authors Maintainers Contributors License

Riot is primarily distributed under the terms of the Apache License (Version 2.0), base on wukong.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3