Skip to content

Commit

Permalink
feat(search): paging and scope (close #4381 in #4930)
Browse files Browse the repository at this point in the history
Co-authored-by: Andy Hsu <i@nn.ci>
  • Loading branch information
Panici4 and xhofe committed Aug 6, 2023
1 parent 3686075 commit 1d06a00
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 3 deletions.
9 changes: 8 additions & 1 deletion internal/db/searchnode.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,12 +72,19 @@ func SearchNode(req model.SearchReq, useFullText bool) ([]model.SearchNode, int6
Where("to_tsvector(name) @@ to_tsquery(?)", strings.Join(strings.Fields(req.Keywords), " & "))
}
}

if req.Scope != 0 {
isDir := req.Scope == 1
searchDB.Where(db.Where("is_dir = ?", isDir))
}

var count int64
if err := searchDB.Count(&count).Error; err != nil {
return nil, 0, errors.Wrapf(err, "failed get search items count")
}
var files []model.SearchNode
if err := searchDB.Offset((req.Page - 1) * req.PerPage).Limit(req.PerPage).Find(&files).Error; err != nil {
if err := searchDB.Order("name asc").Offset((req.Page - 1) * req.PerPage).Limit(req.PerPage).
Find(&files).Error; err != nil {
return nil, 0, err
}
return files, count, nil
Expand Down
2 changes: 2 additions & 0 deletions internal/model/search.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ type IndexProgress struct {
type SearchReq struct {
Parent string `json:"parent"`
Keywords string `json:"keywords"`
// 0 for all, 1 for dir, 2 for file
Scope int `json:"scope"`
PageReq
}

Expand Down
16 changes: 14 additions & 2 deletions internal/search/bleve/search.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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)
Expand All @@ -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 {
Expand Down

0 comments on commit 1d06a00

Please sign in to comment.