1 Star 0 Fork 0

妙音/Search Engine

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
search.go 1.24 KB
一键复制 编辑 原始数据 按行查看 历史
妙音 提交于 2021-05-18 14:27 +08:00 . 词服务独立
package se
import (
"gitee.com/xuender/oils/logs"
"gitee.com/xuender/oils/sets"
"gitee.com/xuender/se/pb"
)
// Search 搜索.
func (p *Service) Search(wordses []string) []*pb.File {
wordSet := sets.NewUint32s()
for _, words := range wordses {
logs.Debug("搜索词组:", words)
if id := p.ws.Word(words, false); id > 0 {
logs.Debug("存在词组", id, words)
wordSet.Add(id)
continue
}
ws := Split(words)
ids := p.ws.wordIDs(ws)
logs.Debug("ids:", ws, ids)
// ID和词数量一致,可能是词组
if len(ids) == len(ws) {
logs.Debug("可能是词组")
// 根据词查找文件,根据文件ID和词组生成词组,返回关联的文件ID
wordSet.Add(p.FindWords(p.fs.FileByWord(ids), words)...)
}
wordSet.Add(ids...)
}
logs.Debug("ids:", wordSet)
words := wordSet.Slice()
fileIDs := sets.NewUint32s(p.fs.FileByWord(words)...)
ids := fileIDs.Slice()
logs.Debug("size:", len(ids))
if len(ids) < int(p.config.Offset) {
return []*pb.File{}
}
limit := int(p.config.Offset + p.config.Limit)
if len(ids) < limit {
limit = len(ids)
}
ids = ids[p.config.Offset:limit]
files := p.fs.Files(ids)
findWords := p.ws.wordStrings(wordSet)
for _, f := range files {
p.fs.Hit(f, findWords)
}
return files
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/xuender/se.git
git@gitee.com:xuender/se.git
xuender
se
Search Engine
v1.0.3

搜索帮助