diff --git a/internal/db/searchnode.go b/internal/db/searchnode.go index 66d47e10..ac75f33b 100644 --- a/internal/db/searchnode.go +++ b/internal/db/searchnode.go @@ -3,6 +3,7 @@ package db import ( "fmt" "path" + "strings" "github.com/alist-org/alist/v3/internal/model" "github.com/alist-org/alist/v3/pkg/utils" @@ -44,12 +45,15 @@ func GetSearchNodesByParent(parent string) ([]model.SearchNode, error) { } func SearchNode(req model.SearchReq) ([]model.SearchNode, int64, error) { + keywordsClause := db.Where("1 = 1") + for _, keyword := range strings.Split(req.Keywords, " ") { + keywordsClause = keywordsClause.Where( + fmt.Sprintf("%s LIKE ?", columnName("name")), + fmt.Sprintf("%%%s%%", keyword)) + } searchDB := db.Model(&model.SearchNode{}).Where( - fmt.Sprintf("%s LIKE ? AND %s LIKE ?", - columnName("parent"), - columnName("name")), - fmt.Sprintf("%s%%", req.Parent), - fmt.Sprintf("%%%s%%", req.Keywords)) + fmt.Sprintf("%s LIKE ?", columnName("parent")), + fmt.Sprintf("%s%%", req.Parent)).Where(keywordsClause) var count int64 if err := searchDB.Count(&count).Error; err != nil { return nil, 0, errors.Wrapf(err, "failed get users count")