From 9840fc1837512c64c626d862720098edf498459f Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Mon, 17 Oct 2022 22:21:57 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E6=94=B9=E8=BF=9B=E8=99=9A=E6=8B=9F?= =?UTF-8?q?=E5=BC=95=E7=94=A8=E5=92=8C=E5=8F=8D=E9=93=BE=E6=8F=90=E5=8F=8A?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E5=88=86=E8=AF=8D=20Fix=20https://github.com?= =?UTF-8?q?/siyuan-note/siyuan/issues/6241?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/backlink.go | 35 +++++++---------------------------- kernel/model/search.go | 14 ++++++++++++-- 2 files changed, 19 insertions(+), 30 deletions(-) diff --git a/kernel/model/backlink.go b/kernel/model/backlink.go index 877c63817..88608804a 100644 --- a/kernel/model/backlink.go +++ b/kernel/model/backlink.go @@ -769,7 +769,6 @@ func searchBackmention(mentionKeywords []string, keyword string, excludeBacklink } blocks := fromSQLBlocks(&sqlBlocks, strings.Join(terms, search.TermSep), beforeLen) - // 排除链接文本 https://github.com/siyuan-note/siyuan/issues/1542 luteEngine := NewLute() var tmp []*Block for _, b := range blocks { @@ -783,40 +782,20 @@ func searchBackmention(mentionKeywords []string, keyword string, excludeBacklink if !entering || n.IsBlock() { return ast.WalkContinue } - if ast.NodeText == n.Type || ast.NodeLinkText == n.Type { + if ast.NodeText == n.Type { textBuf.Write(n.Tokens) } return ast.WalkContinue }) text := textBuf.String() - text = strings.ToLower(text) - text = luteEngine.Space(text) - var contain bool - for _, mentionKeyword := range mentionKeywords { - parts := strings.Split(text, " ") - for _, part := range parts { - if "" == part { - continue - } - - if gulu.Str.IsASCII(mentionKeyword) { - if part == mentionKeyword { - contain = true - break - } - } else { - if strings.Contains(part, strings.ToLower(mentionKeyword)) { - contain = true - break - } - } - } - if contain { - break - } + text = strings.TrimSpace(text) + if "" == text { + continue } - if contain { + + newText := markReplaceSpan(text, mentionKeywords, searchMarkSpanStart, searchMarkSpanEnd) + if text != newText { tmp = append(tmp, b) } } diff --git a/kernel/model/search.go b/kernel/model/search.go index 2b3430c6b..1c7b0b90d 100644 --- a/kernel/model/search.go +++ b/kernel/model/search.go @@ -640,7 +640,7 @@ func stringQuery(query string) string { return strings.TrimSpace(buf.String()) } -func markReplaceSpan(text string, keywords []string, replacementStart, replacementEnd string) string { +func markReplaceSpan(text string, keywords []string, replacementStart, replacementEnd string) (ret string) { parts := strings.Split(text, " ") for i, part := range parts { if "" == part { @@ -676,5 +676,15 @@ func markReplaceSpan(text string, keywords []string, replacementStart, replaceme parts[i] = search.EncloseHighlighting(part, hitKeywords, replacementStart, replacementEnd, Conf.Search.CaseSensitive) } } - return strings.Join(parts, " ") + + ret = strings.Join(parts, " ") + if ret != text { + return + } + + // 包含非 ASCII 字符时再试试不分词匹配 + if !gulu.Str.IsASCII(text) { + ret = search.EncloseHighlighting(text, keywords, replacementStart, replacementEnd, Conf.Search.CaseSensitive) + } + return }