🎨 标点符号不纳入虚拟引用和提及搜索 https://github.com/siyuan-note/siyuan/issues/6272

This commit is contained in:
Liang Ding 2022-10-20 00:58:54 +08:00
parent a70dfc8b20
commit f5cc328a9b
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
3 changed files with 20 additions and 3 deletions

View file

@ -716,6 +716,7 @@ func buildTreeBackmention(defSQLBlock *sql.Block, refBlocks []*Block, keyword st
for _, v := range set.Values() { for _, v := range set.Values() {
mentionKeywords = append(mentionKeywords, v.(string)) mentionKeywords = append(mentionKeywords, v.(string))
} }
mentionKeywords = prepareMarkKeywords(mentionKeywords)
ret = searchBackmention(mentionKeywords, keyword, excludeBacklinkIDs, rootID, beforeLen) ret = searchBackmention(mentionKeywords, keyword, excludeBacklinkIDs, rootID, beforeLen)
return return
} }
@ -726,9 +727,6 @@ func searchBackmention(mentionKeywords []string, keyword string, excludeBacklink
if 1 > len(mentionKeywords) { if 1 > len(mentionKeywords) {
return return
} }
sort.SliceStable(mentionKeywords, func(i, j int) bool {
return len(mentionKeywords[i]) < len(mentionKeywords[j])
})
table := "blocks_fts" // 大小写敏感 table := "blocks_fts" // 大小写敏感
if !Conf.Search.CaseSensitive { if !Conf.Search.CaseSensitive {

View file

@ -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 // 虚拟引用排除当前文档名 https://github.com/siyuan-note/siyuan/issues/4537
virtualBlockRefKeywords = gulu.Str.ExcludeElem(virtualBlockRefKeywords, []string{tree.Root.IALAttr("title")}) 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} subTree := &parse.Tree{ID: rootID, Root: &ast.Node{Type: ast.NodeDocument}, Marks: tree.Marks}

View file

@ -19,6 +19,7 @@ package model
import ( import (
"bytes" "bytes"
"path" "path"
"sort"
"strconv" "strconv"
"strings" "strings"
"time" "time"
@ -641,7 +642,24 @@ func stringQuery(query string) string {
return strings.TrimSpace(buf.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) { func markReplaceSpan(text string, keywords []string, replacementStart, replacementEnd string) (ret string) {
// 调用该函数前参数 keywords 必须使用 prepareMarkKeywords 函数进行预处理
parts := strings.Split(text, " ") parts := strings.Split(text, " ")
for i, part := range parts { for i, part := range parts {
if "" == part { if "" == part {