@@ -0,0 +1,76 @@
|
||||
package vidrichsearcher
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"91porn-server/app/appg"
|
||||
"91porn-server/app/service/searcher"
|
||||
"91porn-server/app/service/searcher/vidhotsearcher"
|
||||
"91porn-server/models/v/vidmod"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
type ObjectID = primitive.ObjectID
|
||||
|
||||
// VidRichSearcher VidRichSearcher
|
||||
type VidRichSearcher struct {
|
||||
uid uint64
|
||||
}
|
||||
|
||||
// NewVidRichSearcher NewVidRichSearcher
|
||||
func NewVidRichSearcher(uid uint64) searcher.Searcher {
|
||||
return &VidRichSearcher{
|
||||
uid: uid,
|
||||
}
|
||||
}
|
||||
|
||||
// Search Search
|
||||
func (v *VidRichSearcher) 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.NewRichVidHotSearcher(v.uid).Search(nil, opt)
|
||||
}
|
||||
limitEx1 := opt.Limit() + 1
|
||||
var vidList []vidmod.ObjectID
|
||||
if appg.Conf.Elastic.IsActive {
|
||||
vidList, err = esSearch(kw, opt)
|
||||
} else {
|
||||
vidList, err = searcher.VideoListByKeyword(kw, opt.Skip(), limitEx1)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(vidList) == 0 {
|
||||
return &Result{[]RichVidRes{}, false}, nil
|
||||
}
|
||||
hasNext := false
|
||||
if len(vidList) > int(opt.Limit()) {
|
||||
hasNext = true
|
||||
vidList = vidList[:opt.Limit()]
|
||||
}
|
||||
richVideoResList, err := searcher.GetRichVideoResListForSearch(v.uid, vidList)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &Result{richVideoResList, hasNext}, nil
|
||||
}
|
||||
|
||||
func esSearch(keyword string, opt searcher.Opter) ([]vidmod.ObjectID, error) {
|
||||
esVideos, err := vidmod.Search(keyword, opt.Skip(), opt.Limit())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
esVideosLen := len(esVideos)
|
||||
if esVideosLen == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
videosID := make([]vidmod.ObjectID, esVideosLen)
|
||||
for i, v := range esVideos {
|
||||
videosID[i] = v.ID
|
||||
}
|
||||
return videosID, nil
|
||||
}
|
||||
Reference in New Issue
Block a user