V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vway
V2EX  ›  程序员

go 分布式全文搜索引擎 RiotSearch

  •  1
     
  •   vway ·
    vcaesar · 2017-10-25 01:31:08 +08:00 · 7107 次点击
    这是一个创建于 2585 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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/engine"
    	"github.com/go-ego/riot/types"
    )
    
    var (
    	// searcher is coroutine safe
    	searcher = engine.Engine{}
    )
    
    func main() {
    	// Init searcher
    	searcher.Init(types.EngineInitOptions{
    		Using:             5,
    		SegmenterDict: "./dict/dictionary.txt"})
    	defer searcher.Close()
    
    	// Add the document to the index, docId starts at 1
    	searcher.IndexDocument(1, types.DocIndexData{Content: "Google Is Experimenting With Virtual Reality Advertising"}, false)
    	searcher.IndexDocument(2, types.DocIndexData{Content: "Google accidentally pushed Bluetooth update for Home speaker early"}, false)
    	searcher.IndexDocument(3, types.DocIndexData{Content: "Google is testing another Search results layout with rounded cards, new colors, and the 4 mysterious colored dots again"}, false)
    
    	// Wait for the index to refresh
    	searcher.FlushIndex()
    
    	// The search output format is found in the types.SearchResponse structure
    	log.Print(searcher.Search(types.SearchRequest{Text: "google testing"}))
    }
    

    主要改进:

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

    项目详情:

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

    27 条回复    2017-10-25 23:59:48 +08:00
    chankenvin
        1
    chankenvin  
       2017-10-25 03:46:19 +08:00 via Android
    请问如何使用?
    qdwang
        2
    qdwang  
       2017-10-25 06:33:21 +08:00 via iPhone   ❤️ 1
    好强大 支持
    anyforever
        3
    anyforever  
       2017-10-25 09:06:19 +08:00
    可以多些 API 出来,让其它语言方便调用
    myself659410
        4
    myself659410  
       2017-10-25 09:11:49 +08:00
    相比较于 ES 有什么优势?
    Xrong
        5
    Xrong  
       2017-10-25 09:12:09 +08:00
    比较希望作者出份与 ES 的对比性质的文章
    vway
        6
    vway  
    OP
       2017-10-25 09:27:01 +08:00 via iPhone
    @chankenvin 中文文档里面有,可以通过部署工具创建
    vway
        7
    vway  
    OP
       2017-10-25 09:27:51 +08:00 via iPhone
    @anyforever 正在写,通过 grpc 来弄
    vway
        8
    vway  
    OP
       2017-10-25 09:28:43 +08:00 via iPhone
    @Xrong 功能完善后会对比测试
    vway
        9
    vway  
    OP
       2017-10-25 09:29:37 +08:00 via iPhone
    @myself659410 简洁高效,部署方便,中文和拼音搜索支持更好
    horsley
        10
    horsley  
       2017-10-25 09:33:16 +08:00
    看到了悟空的痕迹
    vway
        11
    vway  
    OP
       2017-10-25 09:33:21 +08:00 via iPhone
    @qdwang 感谢支持
    vway
        12
    vway  
    OP
       2017-10-25 09:34:50 +08:00 via iPhone
    @horsley 悟空已经一年不活跃了,基于悟空大幅度改进,还持续在改进和完善
    zts1993
        13
    zts1993  
       2017-10-25 09:35:01 +08:00
    持久化存储是外挂得?
    vway
        14
    vway  
    OP
       2017-10-25 09:39:34 +08:00 via iPhone
    @zts1993 实时储存程序启动恢复到内存中,全 disk 和缓存还在计划中,外挂指插件式?
    vway
        15
    vway  
    OP
       2017-10-25 09:53:03 +08:00 via iPhone
    @zts1993 通过接口,扩展很简单
    Morriaty
        16
    Morriaty  
       2017-10-25 10:06:21 +08:00
    支持一个!先 clone 一个看看,有机会的话,混个 contributor
    solos
        17
    solos  
       2017-10-25 11:57:07 +08:00
    这是 fork 的悟空吧
    vway
        18
    vway  
    OP
       2017-10-25 11:58:56 +08:00 via iPhone
    @Morriaty 感谢支持
    vway
        19
    vway  
    OP
       2017-10-25 11:59:34 +08:00 via iPhone
    @solos 大幅度改进,主要改进内容上面已提到
    NeinChn
        20
    NeinChn  
       2017-10-25 12:19:48 +08:00
    看起来没有 two-phase search 之类的 feature
    这表示在多 sharding 的情况下,基于 TF-IDF/BM25 以及其他基于全局 scoring 的 case 会有不精确的情况
    如果数据量少,或者数据倾斜严重,会有错误排序的问题
    不过也看使用场景,有的场景并不太关注这些问题
    vway
        21
    vway  
    OP
       2017-10-25 13:46:11 +08:00
    @NeinChn 感谢建议, 改进会列入考虑
    whyw
        22
    whyw  
       2017-10-25 17:00:24 +08:00   ❤️ 1
    支持, 很好
    vway
        23
    vway  
    OP
       2017-10-25 18:47:13 +08:00
    @whyw 感谢支持
    alexapollo
        24
    alexapollo  
       2017-10-25 19:53:13 +08:00
    TFIDF / BM25 只能得到一个很差的结果,想工业化还比较远的……
    NeinChn
        25
    NeinChn  
       2017-10-25 20:04:16 +08:00
    @alexapollo
    如果只是排序优劣,这个系统也支持 custom rank score
    是不是合适工业化,不只需要看 TF-IDF/BM25
    有其他更需要看重的 feature
    alexapollo
        26
    alexapollo  
       2017-10-25 22:52:29 +08:00
    @NeinChn 搜索引擎不是仅仅用相关性就可以解决的
    vway
        27
    vway  
    OP
       2017-10-25 23:59:48 +08:00
    @alexapollo 看应用场景, 而且刚开源目前还在在完善中
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5316 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 08:42 · PVG 16:42 · LAX 00:42 · JFK 03:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.