From 7bcbed8c3547e55287972bd0bccc7c9e9d8ec495 Mon Sep 17 00:00:00 2001
From: ai_xiaopei <xiaopei@aisim.cn>
Date: Fri, 21 Aug 2026 19:14:11 +0800
Subject: [PATCH] feat(index): nodes 表增加 node_type 列,查询过滤虚拟节点
---
internal/index/sqlite_test.go | 64 ++++++++++++++++++++++++++++++++
1 files changed, 64 insertions(+), 0 deletions(-)
diff --git a/internal/index/sqlite_test.go b/internal/index/sqlite_test.go
index 5ff1d40..e0430ee 100644
--- a/internal/index/sqlite_test.go
+++ b/internal/index/sqlite_test.go
@@ -131,3 +131,67 @@
t.Errorf("links count = %d, want 0", len(links))
}
}
+
+func TestNodeTypeSeparation(t *testing.T) {
+ tmpDir := t.TempDir()
+ store, err := Open(filepath.Join(tmpDir, "test.db"))
+ if err != nil {
+ t.Fatalf("Open failed: %v", err)
+ }
+ defer store.Close()
+
+ // 插入文件节点 + tag 节点
+ fileID, err := store.InsertNode(&graph.Node{
+ Path: "FAQ/001-测试.md", Title: "测试文档", Section: "FAQ", NodeType: "file",
+ Tags: []string{"电磁阀"},
+ })
+ if err != nil {
+ t.Fatalf("InsertNode file failed: %v", err)
+ }
+ tagID, err := store.InsertNode(&graph.Node{
+ Path: "tag:电磁阀", Title: "电磁阀", NodeType: "tag",
+ })
+ if err != nil {
+ t.Fatalf("InsertNode tag failed: %v", err)
+ }
+
+ // tag 节点不进 FTS
+ if err := store.CreateFTS(); err != nil {
+ t.Fatalf("CreateFTS failed: %v", err)
+ }
+ if err := store.PopulateFTS(); err != nil {
+ t.Fatalf("PopulateFTS failed: %v", err)
+ }
+ res, err := store.FTSSearch([]string{"测试"}, 10)
+ if err != nil {
+ t.Fatalf("FTSSearch failed: %v", err)
+ }
+ for _, r := range res {
+ if r.ID == tagID {
+ t.Error("FTS result contains tag node")
+ }
+ }
+
+ // FindNodesByKeyword 不返回 tag 节点
+ nodes, err := store.FindNodesByKeyword("电磁阀")
+ if err != nil {
+ t.Fatalf("FindNodesByKeyword failed: %v", err)
+ }
+ for _, n := range nodes {
+ if n.ID == tagID {
+ t.Error("FindNodesByKeyword returned tag node")
+ }
+ }
+
+ // GetAllNodes 只返回 file 节点
+ all, err := store.GetAllNodes()
+ if err != nil {
+ t.Fatalf("GetAllNodes failed: %v", err)
+ }
+ for _, n := range all {
+ if n.ID == tagID {
+ t.Error("GetAllNodes returned tag node")
+ }
+ }
+ _ = fileID
+}
--
Gitblit v1.10.0