Files
huangguo_server/app/service/searcher/fictionsearcher/fictionSearcher.go
T
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

64 lines
1.4 KiB
Go

package fictionsearcher
import (
"errors"
"91porn-server/app/appg"
"91porn-server/app/service/searcher"
"91porn-server/models/v/fictionmod"
)
// FictionSearcher FictionSearcher
type FictionSearcher struct {
uid *uint64
}
// NewFictionSearcher NewFictionSearcher
func NewFictionSearcher(uid *uint64) searcher.Searcher {
return &FictionSearcher{
uid: uid,
}
}
// Search Search
func (t *FictionSearcher) Search(keywrod searcher.KeyWorder, opt searcher.Opter) (result searcher.Resulter, err error) {
var fiction []fictionmod.FictionBase
kw, ok := keywrod.Get().(string)
if !ok {
return nil, errors.New("keyword type error")
}
hasNext := false
if kw == "" { //关键字为空,热搜
fiction, hasNext, err = fictionmod.GetNew(opt)
if err != nil {
return nil, err
}
return &Result{fiction, hasNext}, nil
}
if appg.Conf.Elastic.IsActive {
fiction, err = esSearch(kw, opt)
if len(fiction) > int(opt.Limit()) {
hasNext = true
fiction = fiction[:opt.Limit()]
}
} else {
fiction, hasNext, err = fictionmod.GetNew(opt)
}
if err != nil {
return nil, err
}
return &Result{fiction, hasNext}, nil
}
func esSearch(keyword string, opt searcher.Opter) (data []fictionmod.FictionBase, err error) {
fiction, err := fictionmod.Search(keyword, opt.Skip(), opt.Limit()+1)
if err != nil {
return
}
data = make([]fictionmod.FictionBase, len(fiction))
for i := range fiction {
data[i] = fiction[i].Source
}
return
}