From 0cd17327bc3f251831589cb781cf0d4918919bcc Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Tue, 24 Sep 2024 23:01:01 +0800 Subject: [PATCH] :art: Moving doc search supports multiple keywords separated by spaces https://github.com/siyuan-note/siyuan/issues/12577 --- kernel/model/file.go | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/kernel/model/file.go b/kernel/model/file.go index c316786f1..f7ea2436a 100644 --- a/kernel/model/file.go +++ b/kernel/model/file.go @@ -180,10 +180,11 @@ func SearchDocsByKeyword(keyword string, flashcard bool) (ret []map[string]strin boxes[box.ID] = box } + keywords := strings.Fields(keyword) var rootBlocks []*sql.Block - if "" != keyword { + if 0 < len(keywords) { for _, box := range boxes { - if strings.Contains(box.Name, keyword) { + if util.ContainsSubStr(box.Name, keywords) { if flashcard { newFlashcardCount, dueFlashcardCount, flashcardCount := countBoxFlashcard(box.ID, deck, deckBlockIDs) if 0 < flashcardCount { @@ -195,13 +196,18 @@ func SearchDocsByKeyword(keyword string, flashcard bool) (ret []map[string]strin } } - condition := "hpath LIKE '%" + keyword + "%'" - if "" != keyword { - namCondition := Conf.Search.NAMFilter(keyword) - if "" != namCondition { - condition += " " + namCondition + var condition string + for i, k := range keywords { + condition += "(hpath LIKE '%" + k + "%'" + namCondition := Conf.Search.NAMFilter(k) + condition += " " + namCondition + condition += ")" + + if i < len(keywords)-1 { + condition += " AND " } } + rootBlocks = sql.QueryRootBlockByCondition(condition) } else { for _, box := range boxes {