From f5cc328a9bb169194c4859ed0b7d0c371015a217 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Thu, 20 Oct 2022 00:58:54 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E6=A0=87=E7=82=B9=E7=AC=A6=E5=8F=B7?= =?UTF-8?q?=E4=B8=8D=E7=BA=B3=E5=85=A5=E8=99=9A=E6=8B=9F=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E5=92=8C=E6=8F=90=E5=8F=8A=E6=90=9C=E7=B4=A2=20https://github.?= =?UTF-8?q?com/siyuan-note/siyuan/issues/6272?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/backlink.go | 4 +--- kernel/model/file.go | 1 + kernel/model/search.go | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/kernel/model/backlink.go b/kernel/model/backlink.go index 88608804a..efafd41cd 100644 --- a/kernel/model/backlink.go +++ b/kernel/model/backlink.go @@ -716,6 +716,7 @@ func buildTreeBackmention(defSQLBlock *sql.Block, refBlocks []*Block, keyword st for _, v := range set.Values() { mentionKeywords = append(mentionKeywords, v.(string)) } + mentionKeywords = prepareMarkKeywords(mentionKeywords) ret = searchBackmention(mentionKeywords, keyword, excludeBacklinkIDs, rootID, beforeLen) return } @@ -726,9 +727,6 @@ func searchBackmention(mentionKeywords []string, keyword string, excludeBacklink if 1 > len(mentionKeywords) { return } - sort.SliceStable(mentionKeywords, func(i, j int) bool { - return len(mentionKeywords[i]) < len(mentionKeywords[j]) - }) table := "blocks_fts" // 大小写敏感 if !Conf.Search.CaseSensitive { diff --git a/kernel/model/file.go b/kernel/model/file.go index 25b453d63..045208661 100644 --- a/kernel/model/file.go +++ b/kernel/model/file.go @@ -615,6 +615,7 @@ func GetDoc(startID, endID, id string, index int, keyword string, mode int, size // 虚拟引用排除当前文档名 https://github.com/siyuan-note/siyuan/issues/4537 virtualBlockRefKeywords = gulu.Str.ExcludeElem(virtualBlockRefKeywords, []string{tree.Root.IALAttr("title")}) + virtualBlockRefKeywords = prepareMarkKeywords(virtualBlockRefKeywords) } subTree := &parse.Tree{ID: rootID, Root: &ast.Node{Type: ast.NodeDocument}, Marks: tree.Marks} diff --git a/kernel/model/search.go b/kernel/model/search.go index 27233cf69..4f7423332 100644 --- a/kernel/model/search.go +++ b/kernel/model/search.go @@ -19,6 +19,7 @@ package model import ( "bytes" "path" + "sort" "strconv" "strings" "time" @@ -641,7 +642,24 @@ func stringQuery(query string) string { return strings.TrimSpace(buf.String()) } +func prepareMarkKeywords(keywords []string) (ret []string) { + keywords = gulu.Str.RemoveDuplicatedElem(keywords) + for _, k := range keywords { + if strings.ContainsAny(k, "?*!@#$%^&()[]{}\\|;:'\",.<>~`") { + continue + } + ret = append(ret, k) + } + + sort.SliceStable(ret, func(i, j int) bool { + return len(ret[i]) < len(ret[j]) + }) + return +} + func markReplaceSpan(text string, keywords []string, replacementStart, replacementEnd string) (ret string) { + // 调用该函数前参数 keywords 必须使用 prepareMarkKeywords 函数进行预处理 + parts := strings.Split(text, " ") for i, part := range parts { if "" == part {