新手问题 go 分布式全文搜索引擎 RiotSearch

veni · 2017年10月23日 · 最后由 veni 回复于 2017年11月21日 · 268 次阅读

riot 分布式全文搜索引擎, 采用 Go 语言开发。功能特性:

  • 高效索引和搜索(1M 条微博 500M 数据 28 秒索引完,1.65 毫秒搜索响应时间,19K 搜索 QPS)
  • 支持中文分词(使用 gse 分词包并发分词,速度 27MB/秒)
  • 支持逻辑搜索
  • 支持中文转拼音搜索
  • 支持计算关键词在文本中的紧邻距离(token proximity)
  • 支持计算 BM25 相关度
  • 支持自定义评分字段和评分规则
  • 支持在线添加、删除索引
  • 支持多种持久存储
  • 支持 heartbeat
  • 支持分布式索引和搜索
  • 可实现分布式索引和搜索
  • 采用对商业应用友好的 Apache License v2 发布

示例代码:

package main

import (
    "log"

    "github.com/go-ego/riot"
    "github.com/go-ego/riot/types"
)

var (
    // searcher is coroutine safe
    searcher = riot.Engine{}
)

func main() {
    // Init searcher
    searcher.Init(types.EngineOpts{
        Using:             4,
        SegmenterDict: "./dict/dictionary.txt"})
    defer searcher.Close()

    text := "Google Is Experimenting With Virtual Reality Advertising"
    text1 := `Google accidentally pushed Bluetooth update for Home
    speaker early`
    text2 := `Google is testing another Search results layout with 
    rounded cards, new colors, and the 4 mysterious colored dots again`

    // Add the document to the index, docId starts at 1
    searcher.IndexDoc(1, types.DocIndexData{Content: text}, false)
    searcher.IndexDoc(2, types.DocIndexData{Content: text1}, false)
    searcher.IndexDoc(3, types.DocIndexData{Content: text2}, false)

    // Wait for the index to refresh
    searcher.FlushIndex()

    // The search output format is found in the types.SearchResp structure
    log.Print(searcher.Search(types.SearchReq{Text: "google testing"}))
}

主要改进:

  • 增加逻辑搜索 
  • 增加拼音搜索 
  • 增加分布式和 heartbeat
  • 分词等改进 
  • 增加更多 api
  • 修复 bug
  • 删除依赖 cgo 的存储引擎, 增加 badger 和 leveldb 持久化引擎

项目详情:

Github 在线源码:https://github.com/go-ego/riot

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio

悟空搜索的改进还是只是改了一个名字?

大幅度改进

应该是大幅改进, 悟空 半年没更新了, 人家也说了是个 实验项目, 不知道 Riot 这个可有生产项目.

代码注释很对胃口,是为我这种不爱看英文的准备

感谢作者!所带分词和结巴分词比怎么样?

之前用过 wukong,很占内存,但是速度是很快的。

嗯, 占内存是一个问题, 计划建一个磁盘加缓存的分支

分词目前看来还 ok 吧, 没对比过结巴分词, 等功能更完善会测试、对比分词和搜索

分词已经修复很多 bug, 分词速度也很快, 和 gojieba 差不多, 比 jiebago 快很多

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册