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 }