From 34202540e9d70c07498c61f7de533017cf729643 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sun, 26 May 2024 19:48:57 +0800 Subject: [PATCH] :art: The keyword search logic in-database is changed from OR to AND https://github.com/siyuan-note/siyuan/issues/11535 --- kernel/sql/av.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/kernel/sql/av.go b/kernel/sql/av.go index 417e6eac9..34a3e5983 100644 --- a/kernel/sql/av.go +++ b/kernel/sql/av.go @@ -321,17 +321,26 @@ func RenderAttributeViewTable(attrView *av.AttributeView, view *av.View, query s // 根据搜索条件过滤 query = strings.TrimSpace(query) if "" != query { + // 将连续空格转换为一个空格 + query = strings.Join(strings.Fields(query), " ") + // 按空格分割关键字 keywords := strings.Split(query, " ") + // 使用 AND 逻辑 https://github.com/siyuan-note/siyuan/issues/11535 var hitRows []*av.TableRow for _, row := range ret.Rows { hit := false for _, cell := range row.Cells { + allKeywordsHit := true for _, keyword := range keywords { - if strings.Contains(strings.ToLower(cell.Value.String(true)), strings.ToLower(keyword)) { - hit = true + if !strings.Contains(strings.ToLower(cell.Value.String(true)), strings.ToLower(keyword)) { + allKeywordsHit = false break } } + if allKeywordsHit { + hit = true + break + } } if hit { hitRows = append(hitRows, row)