代码拉取完成,页面将自动刷新
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
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。