From a5c01a3f115399b55f43d639c8278b8d68c6211c Mon Sep 17 00:00:00 2001
From: ax_rd <ax_rd@aisim.cn>
Date: Thu, 03 Sep 2026 11:26:53 +0800
Subject: [PATCH] feat: wikilink 边可信度标注(exact/fuzzy)+ 悬空链接入 unresolved_links 表
---
cmd/search.go | 51 +++++++++++++++++++++++++++------------------------
1 files changed, 27 insertions(+), 24 deletions(-)
diff --git a/cmd/search.go b/cmd/search.go
index 6552d88..7083750 100644
--- a/cmd/search.go
+++ b/cmd/search.go
@@ -3,6 +3,7 @@
import (
"fmt"
"os"
+ "strings"
"github.com/aisim/kb-cli/internal/index"
"github.com/aisim/kb-cli/internal/search"
@@ -22,23 +23,10 @@
var searchCmd = &cobra.Command{
Use: "search [keywords...]",
Short: "搜索知识库",
- Long: `# search - 搜索
-kb-cli search <关键词> [flags]
-
-参数:
- <关键词> 搜索关键词(必填,支持多个)
- --top N 返回前 N 条结果(默认 10)
- --expanded <词> 扩展词(提升相关实体权重,支持多个)
- --symptom <词> 症状词(针对具体症状,支持多个)
- --with-content 返回完整文件内容
- --with-links 显示关联文档链接
- --json JSON 格式输出
-
-全局参数:
- --vault <路径> 知识库根目录(默认:~/aisim/note/001/笔记001)
- --db <路径> 索引数据库路径(默认:~/.cache/kb-cli/kb.db)`,
- Args: cobra.MinimumNArgs(1),
- RunE: runSearch,
+ Long: `# search - 搜索
+kb-cli search <关键词> [--top N] [--expanded <词>] [--symptom <词>] [--with-content] [--with-links] [--json] # 搜索知识库,支持关键词、扩展词、症状词`,
+ Args: cobra.MinimumNArgs(1),
+ RunE: runSearch,
}
func init() {
@@ -49,6 +37,9 @@
searchCmd.Flags().BoolVar(&jsonOut, "json", false, "JSON 格式输出")
searchCmd.Flags().BoolVar(&withContent, "with-content", false, "返回完整文件内容")
searchCmd.Flags().BoolVar(&withLinks, "with-links", false, "显示关联文档链接")
+
+ // 参数不足时显示 help
+ searchCmd.SetUsageTemplate(searchCmd.Long)
}
func runSearch(cmd *cobra.Command, args []string) error {
@@ -59,19 +50,31 @@
}
defer store.Close()
- // 检查是否需要重建索引
- needsRebuild, commit, err := index.NeedsRebuild(store, vaultPath)
+ // pre-flight:快速检查索引是否有变更(只 stat 比对,不读内容)
+ dirty, err := index.QuickCheck(store, vaultPath)
if err != nil {
return fmt.Errorf("检查索引状态失败: %w", err)
}
- if needsRebuild {
- fmt.Fprintln(os.Stderr, "索引过期,正在重建...")
- if err := rebuildIndex(store, commit); err != nil {
- return fmt.Errorf("重建索引失败: %w", err)
+ if dirty {
+ fmt.Fprintln(os.Stderr, "索引有变更,正在增量同步...")
+ if err := syncIndex(store); err != nil {
+ return fmt.Errorf("增量同步失败: %w", err)
}
}
+ // 合并所有关键词(支持空格分隔和引号分隔)
+ var allKeywords []string
+ for _, arg := range args {
+ // 如果参数包含空格,按空格分割
+ parts := strings.Fields(arg)
+ allKeywords = append(allKeywords, parts...)
+ }
+
+ if len(allKeywords) == 0 {
+ return fmt.Errorf("请提供至少一个关键词")
+ }
+
// 执行搜索
opts := search.SearchOptions{
Expanded: expanded,
@@ -81,7 +84,7 @@
WithLinks: withLinks,
}
- results, err := search.Search(store, args, opts)
+ results, err := search.Search(store, allKeywords, opts)
if err != nil {
return fmt.Errorf("搜索失败: %w", err)
}
--
Gitblit v1.10.0