文档中心内容搜索实现:Riot搜索引擎(Golang)(一 搜索引擎开源库介绍与文档中心功能设计)
·
文章目录
概要
联通最近开源的万悟作为央企首个开源的智能体开发平台,支持多租户、license友好并且基于golang开发。本文基于源码分析平台关于文档搜索的实现思路。
项目源码地址:
链接
文档中心实现效果

Riot概要
特性
-
高效索引和搜索(1M 条微博 500M 数据28秒索引完,1.65毫秒搜索响应时间,19K 搜索 QPS)
-
支持中文分词(使用 gse 分词包并发分词,速度 27MB/秒)
-
支持逻辑搜索
-
支持中文转拼音搜索(使用 gpy 中文转拼音)
-
支持计算关键词在文本中的紧邻距离(token proximity)
-
支持计算BM25相关度
-
支持多种持久存储
-
支持 heartbeat
-
支持分布式索引和搜索
-
可实现分布式索引和搜索
-
采用对商业应用友好的Apache License v2发布
Riot使用
先看一个搜索引擎例子(来自 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:"复仇者"}))
}
文档中心整体功能设计
需求:md文档目录生成以及md转html以后端处理为主
-
为了方便后续迭代文档需要把md文档内容整体展示,目录与md文档目录对齐 。
-
md内容是前端渲染,所以后端只需要返回文档内容(对图片链接需要特殊处理)。
-
文档搜索实现(内置搜索引擎需要实现一个内存级的文本搜索引擎)。
更多推荐
所有评论(0)