Initial commit

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 13:57:10 +08:00
co-authored by Claude Opus 5
commit 8679200f41
1897 changed files with 257900 additions and 0 deletions
@@ -0,0 +1,72 @@
package vidsearcher
import (
"errors"
"91porn-server/app/appg"
"91porn-server/app/service/searcher"
"91porn-server/app/service/searcher/vidhotsearcher"
"91porn-server/models/v/vidmod"
)
// VidSearcher VidSearcher
type VidSearcher struct {
uid uint64
vidType string
sortType int
}
// NewVidSearcher NewVidSearcher
func NewVidSearcher(uid uint64, vidType string, sortType int) searcher.Searcher {
return &VidSearcher{uid: uid, vidType: vidType, sortType: sortType}
}
// Search Search
func (v *VidSearcher) Search(keyword searcher.KeyWorder, opt searcher.Opter) (result searcher.Resulter, err error) {
kw, ok := keyword.Get().(string)
if !ok {
return nil, errors.New("keyword type error")
}
if kw == "" { //关键字为空,热搜
return vidhotsearcher.NewVidHotSearcher(v.uid).Search(nil, opt)
}
limitEx1 := opt.Limit() + 1
var vidList []vidmod.ObjectID
if appg.Conf.Elastic.IsActive { // 使用ES搜索视频
vidList, err = esSearch(kw, v.vidType, opt, v.sortType)
} else {
vidList, err = searcher.VideoListByKeyword(kw, opt.Skip(), limitEx1)
}
if err != nil {
return nil, err
}
if len(vidList) == 0 {
return &Result{[]VideoRes{}, false}, nil
}
hasNext := false
if len(vidList) > int(opt.Limit()) {
hasNext = true
vidList = vidList[:opt.Limit()]
}
videoResList, err := searcher.GetVideoResListForSearch(v.uid, vidList)
if err != nil {
return nil, err
}
return &Result{videoResList, hasNext}, nil
}
func esSearch(keyword string, vidType string, opt searcher.Opter, sortType int) ([]vidmod.ObjectID, error) {
esVideos, err := vidmod.DirectSearch(keyword, vidType, sortType, opt.Skip(), opt.Limit()+1)
if err != nil {
return nil, nil
}
esVideosLen := len(esVideos)
if esVideosLen == 0 {
return nil, err
}
videosID := make([]vidmod.ObjectID, esVideosLen)
for i, v := range esVideos {
videosID[i] = v.ID
}
return videosID, nil
}