Permalink
Switch branches/tags
Nothing to show
Find file Copy path
12ad780 Sep 25, 2018
1 contributor

Users who have contributed to this file

executable file 198 lines (144 sloc) 6.67 KB

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

QQ 群: 120563750

安装/更新

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

Donate

支持 riot, buy me a coffee.

Paypal

Donate money by paypal to my account vzvway@gmail.com

其它

License

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