feat(search): paging and scope (close #4381 in #4930)

Co-authored-by: Andy Hsu <i@nn.ci>
This commit is contained in:
panici
2023-08-06 15:13:23 +08:00
committed by GitHub
parent 3686075a7f
commit 1d06a0019f
3 changed files with 24 additions and 3 deletions

View File

@ -4,6 +4,8 @@ import (
"context"
"os"
query2 "github.com/blevesearch/bleve/v2/search/query"
"github.com/alist-org/alist/v3/internal/conf"
"github.com/alist-org/alist/v3/internal/errs"
"github.com/alist-org/alist/v3/internal/model"
@ -24,9 +26,19 @@ func (b *Bleve) Config() searcher.Config {
}
func (b *Bleve) Search(ctx context.Context, req model.SearchReq) ([]model.SearchNode, int64, error) {
var queries []query2.Query
query := bleve.NewMatchQuery(req.Keywords)
query.SetField("name")
search := bleve.NewSearchRequest(query)
queries = append(queries, query)
if req.Scope != 0 {
isDir := req.Scope == 1
isDirQuery := bleve.NewBoolFieldQuery(isDir)
queries = append(queries, isDirQuery)
}
reqQuery := bleve.NewConjunctionQuery(queries...)
search := bleve.NewSearchRequest(reqQuery)
search.SortBy([]string{"name"})
search.From = (req.Page - 1) * req.PerPage
search.Size = req.PerPage
search.Fields = []string{"*"}
searchResults, err := b.BIndex.Search(search)
@ -42,7 +54,7 @@ func (b *Bleve) Search(ctx context.Context, req model.SearchReq) ([]model.Search
Size: int64(src.Fields["size"].(float64)),
}, nil
})
return res, int64(len(res)), nil
return res, int64(searchResults.Total), nil
}
func (b *Bleve) Index(ctx context.Context, node model.SearchNode) error {