go 分散式全文搜尋引擎 RiotSearch

veni發表於2017-10-23

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

更多原創文章乾貨分享,請關注公眾號
  • go 分散式全文搜尋引擎 RiotSearch
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章