package index import ( "path/filepath" "testing" "github.com/aisim/kb-cli/internal/graph" ) func TestFTSSearch(t *testing.T) { tmpDir := t.TempDir() dbPath := filepath.Join(tmpDir, "test.db") store, err := Open(dbPath) if err != nil { t.Fatalf("Open failed: %v", err) } defer store.Close() // 插入测试数据 store.InsertNode(&graph.Node{ ID: 1, Path: "FAQ/充装类/001-test.md", Title: "充装问题排查", Section: "FAQ", Tags: []string{"充装"}, Content: "关于智能枪充装问题的排查方法", }) store.InsertNode(&graph.Node{ ID: 2, Path: "知识/002-config.md", Title: "充装规格配置", Section: "知识", Tags: []string{"配置"}, Content: "充装规格配置说明", }) // 创建 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) } // 搜索 - FTS5 对中文按字符 tokenize,"充装" 两个节点都包含 results, err := store.FTSSearch([]string{"充装"}, 10) if err != nil { t.Fatalf("FTSSearch failed: %v", err) } if len(results) < 1 { t.Errorf("result count = %d, want >= 1", len(results)) } }