🎨 搜索结果按文档分组时按块在文档中的先后排序 Fix https://github.com/siyuan-note/siyuan/issues/6749

This commit is contained in:
Liang Ding 2022-11-30 12:11:49 +08:00
parent 4f25021884
commit 3e2bddf5d8
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
2 changed files with 22 additions and 0 deletions

View file

@ -55,6 +55,7 @@ type Block struct {
Children []*Block `json:"children"`
Depth int `json:"depth"`
Count int `json:"count"`
Sort int `json:"sort"`
}
func (block *Block) IsContainerBlock() bool {

View file

@ -22,6 +22,7 @@ import (
"fmt"
"path"
"regexp"
"sort"
"strconv"
"strings"
"time"
@ -344,20 +345,39 @@ func FullTextSearchBlock(query string, boxes, paths []string, types map[string]b
case 1: // 按文档分组
rootMap := map[string]bool{}
var rootIDs []string
sorts := map[string]int{}
for _, b := range blocks {
if _, ok := rootMap[b.RootID]; !ok {
rootMap[b.RootID] = true
rootIDs = append(rootIDs, b.RootID)
tree, _ := loadTreeByBlockID(b.RootID)
if nil == tree {
continue
}
sort := 0
ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
if !entering || !n.IsBlock() {
return ast.WalkContinue
}
sorts[n.ID] = sort
sort++
return ast.WalkContinue
})
}
}
sqlRoots := sql.GetBlocks(rootIDs)
roots := fromSQLBlocks(&sqlRoots, "", beforeLen)
for _, root := range roots {
for _, b := range blocks {
b.Sort = sorts[b.ID]
if b.RootID == root.ID {
root.Children = append(root.Children, b)
}
}
sort.Slice(root.Children, func(i, j int) bool { return root.Children[i].Sort < root.Children[j].Sort })
}
ret = roots
default:
@ -729,6 +749,7 @@ func fromSQLBlock(sqlBlock *sql.Block, terms string, beforeLen int) (block *Bloc
Markdown: markdown,
Type: treenode.FromAbbrType(sqlBlock.Type),
SubType: sqlBlock.SubType,
Sort: sqlBlock.Sort,
}
if "" != sqlBlock.IAL {
block.IAL = map[string]string{}