mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-05-04 06:31:06 +08:00
🎨 Improve Add to Database
search sorting https://github.com/siyuan-note/siyuan/issues/10952
This commit is contained in:
parent
225930d3cf
commit
c4d2f9e706
@ -196,20 +196,19 @@ func SearchAttributeView(keyword string) (ret []*SearchAttributeViewResult) {
|
|||||||
keyword = strings.TrimSpace(keyword)
|
keyword = strings.TrimSpace(keyword)
|
||||||
|
|
||||||
type result struct {
|
type result struct {
|
||||||
AvID string
|
AvID string
|
||||||
AvName string
|
AvName string
|
||||||
Score float64
|
AvUpdated int64
|
||||||
|
Score float64
|
||||||
}
|
}
|
||||||
var avs []*result
|
var avs []*result
|
||||||
avDir := filepath.Join(util.DataDir, "storage", "av")
|
avDir := filepath.Join(util.DataDir, "storage", "av")
|
||||||
const limit = 16
|
|
||||||
entries, err := os.ReadDir(avDir)
|
entries, err := os.ReadDir(avDir)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
logging.LogErrorf("read directory [%s] failed: %s", avDir, err)
|
logging.LogErrorf("read directory [%s] failed: %s", avDir, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
count := 0
|
|
||||||
for _, entry := range entries {
|
for _, entry := range entries {
|
||||||
if entry.IsDir() {
|
if entry.IsDir() {
|
||||||
continue
|
continue
|
||||||
@ -221,29 +220,39 @@ func SearchAttributeView(keyword string) (ret []*SearchAttributeViewResult) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
name, _ := av.GetAttributeViewNameByPath(filepath.Join(avDir, entry.Name()))
|
name, _ := av.GetAttributeViewNameByPath(filepath.Join(avDir, entry.Name()))
|
||||||
if "" == name {
|
info, _ := entry.Info()
|
||||||
continue
|
if "" != keyword {
|
||||||
}
|
if strings.Contains(strings.ToLower(name), strings.ToLower(keyword)) {
|
||||||
|
score := smetrics.JaroWinkler(name, keyword, 0.7, 4)
|
||||||
if strings.Contains(strings.ToLower(name), strings.ToLower(keyword)) {
|
a := &result{AvID: id, AvName: name, Score: score}
|
||||||
score := smetrics.JaroWinkler(name, keyword, 0.7, 4)
|
if nil != info && !info.ModTime().IsZero() {
|
||||||
avs = append(avs, &result{AvID: id, AvName: name, Score: score})
|
a.AvUpdated = info.ModTime().UnixMilli()
|
||||||
count++
|
}
|
||||||
if "" == keyword && limit <= count {
|
avs = append(avs, a)
|
||||||
break
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
a := &result{AvID: id, AvName: name}
|
||||||
|
if nil != info && !info.ModTime().IsZero() {
|
||||||
|
a.AvUpdated = info.ModTime().UnixMilli()
|
||||||
|
}
|
||||||
|
avs = append(avs, a)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sort.Slice(avs, func(i, j int) bool { return avs[i].Score > avs[j].Score })
|
if "" == keyword {
|
||||||
if limit < len(avs) {
|
sort.Slice(avs, func(i, j int) bool { return avs[i].AvUpdated > avs[j].AvUpdated })
|
||||||
avs = avs[:limit]
|
} else {
|
||||||
|
sort.Slice(avs, func(i, j int) bool { return avs[i].Score > avs[j].Score })
|
||||||
|
}
|
||||||
|
if 16 < len(avs) {
|
||||||
|
avs = avs[:16]
|
||||||
}
|
}
|
||||||
|
|
||||||
var avIDs []string
|
var avIDs []string
|
||||||
for _, av := range avs {
|
for _, a := range avs {
|
||||||
avIDs = append(avIDs, av.AvID)
|
avIDs = append(avIDs, a.AvID)
|
||||||
}
|
}
|
||||||
|
|
||||||
blockIDs := treenode.BatchGetMirrorAttrViewBlockIDs(avIDs)
|
blockIDs := treenode.BatchGetMirrorAttrViewBlockIDs(avIDs)
|
||||||
trees := map[string]*parse.Tree{}
|
trees := map[string]*parse.Tree{}
|
||||||
for _, blockID := range blockIDs {
|
for _, blockID := range blockIDs {
|
||||||
|
Loading…
Reference in New Issue
Block a user