diff --git a/app/src/search/util.ts b/app/src/search/util.ts index d1cde03a7..c9f3f5ae6 100644 --- a/app/src/search/util.ts +++ b/app/src/search/util.ts @@ -1393,6 +1393,7 @@ const onSearch = (data: IBlock[], edit: Protyle, element: Element, config: Confi let resultHTML = ""; data.forEach((item, index) => { const title = getNotebookName(item.box) + getDisplayName(item.hPath, false); + const tags = item.tag ? `${item.tag.split("# #").map(tag => `${tag.replace("#", "")}`).join(" ").replace("#", "")}` : ""; if (item.children) { resultHTML += `
@@ -1416,6 +1417,7 @@ ${getAttr(childItem)} ${unicode2Emoji(item.ial.icon, "b3-list-item__graphic", true)} ${item.content} ${getAttr(item)} +${tags} ${escapeGreat(title)}
`; } diff --git a/app/src/types/index.d.ts b/app/src/types/index.d.ts index 9e78638d4..575733500 100644 --- a/app/src/types/index.d.ts +++ b/app/src/types/index.d.ts @@ -668,6 +668,7 @@ interface IBlock { name?: string; memo?: string; alias?: string; + tag?: string; refs?: IBlock[]; children?: IBlock[] length?: number diff --git a/kernel/model/search.go b/kernel/model/search.go index 5a60cff96..e02ddc237 100644 --- a/kernel/model/search.go +++ b/kernel/model/search.go @@ -1202,7 +1202,7 @@ func fullTextSearchRefBlock(keyword string, beforeLen int, onlyDoc bool) (ret [] "snippet(" + table + ", 7, '" + search.SearchMarkLeft + "', '" + search.SearchMarkRight + "', '...', 64) AS name, " + "snippet(" + table + ", 8, '" + search.SearchMarkLeft + "', '" + search.SearchMarkRight + "', '...', 64) AS alias, " + "snippet(" + table + ", 9, '" + search.SearchMarkLeft + "', '" + search.SearchMarkRight + "', '...', 64) AS memo, " + - "tag, " + + "snippet(" + table + ", 10, '" + search.SearchMarkLeft + "', '" + search.SearchMarkRight + "', '...', 64) AS tag, " + "snippet(" + table + ", 11, '" + search.SearchMarkLeft + "', '" + search.SearchMarkRight + "', '...', 64) AS content, " + "fcontent, markdown, length, type, subtype, ial, sort, created, updated" stmt := "SELECT " + projections + " FROM " + table + " WHERE " + table + " MATCH '" + columnFilter() + ":(" + quotedKeyword + ")' AND type" @@ -1325,7 +1325,7 @@ func fullTextSearchByFTS(query, boxFilter, pathFilter, typeFilter, orderBy strin "snippet(" + table + ", 7, '" + search.SearchMarkLeft + "', '" + search.SearchMarkRight + "', '...', 512) AS name, " + "snippet(" + table + ", 8, '" + search.SearchMarkLeft + "', '" + search.SearchMarkRight + "', '...', 512) AS alias, " + "snippet(" + table + ", 9, '" + search.SearchMarkLeft + "', '" + search.SearchMarkRight + "', '...', 512) AS memo, " + - "tag, " + + "snippet(" + table + ", 10, '" + search.SearchMarkLeft + "', '" + search.SearchMarkRight + "', '...', 64) AS tag, " + "snippet(" + table + ", 11, '" + search.SearchMarkLeft + "', '" + search.SearchMarkRight + "', '...', 512) AS content, " + "fcontent, markdown, length, type, subtype, ial, sort, created, updated" stmt := "SELECT " + projections + " FROM " + table + " WHERE (`" + table + "` MATCH '" + columnFilter() + ":(" + query + ")'" @@ -1365,7 +1365,7 @@ func highlightByFTS(query, typeFilter, id string) (ret []string) { "highlight(" + table + ", 7, '" + search.SearchMarkLeft + "', '" + search.SearchMarkRight + "') AS name, " + "highlight(" + table + ", 8, '" + search.SearchMarkLeft + "', '" + search.SearchMarkRight + "') AS alias, " + "highlight(" + table + ", 9, '" + search.SearchMarkLeft + "', '" + search.SearchMarkRight + "') AS memo, " + - "tag, " + + "highlight(" + table + ", 10, '" + search.SearchMarkLeft + "', '" + search.SearchMarkRight + "') AS tag, " + "highlight(" + table + ", 11, '" + search.SearchMarkLeft + "', '" + search.SearchMarkRight + "') AS content, " + "fcontent, markdown, length, type, subtype, ial, sort, created, updated" stmt := "SELECT " + projections + " FROM " + table + " WHERE (`" + table + "` MATCH '" + columnFilter() + ":(" + query + ")'" @@ -1490,6 +1490,7 @@ func fromSQLBlock(sqlBlock *sql.Block, terms string, beforeLen int) (block *Bloc content = util.EscapeHTML(content) // Search dialog XSS https://github.com/siyuan-note/siyuan/issues/8525 content, _ = markSearch(content, terms, beforeLen) content = maxContent(content, 5120) + tag, _ := markSearch(sqlBlock.Tag, terms, beforeLen) markdown := maxContent(sqlBlock.Markdown, 5120) fContent := util.EscapeHTML(sqlBlock.FContent) // fContent 会用于和 content 对比,在反链计算时用于判断是否是列表项下第一个子块,所以也需要转义 https://github.com/siyuan-note/siyuan/issues/11001 block = &Block{ @@ -1501,7 +1502,7 @@ func fromSQLBlock(sqlBlock *sql.Block, terms string, beforeLen int) (block *Bloc Alias: sqlBlock.Alias, Name: sqlBlock.Name, Memo: sqlBlock.Memo, - Tag: sqlBlock.Tag, + Tag: tag, Content: content, FContent: fContent, Markdown: markdown,