v0.6.0

關鍵字搜尋

最後更新


查詢字串如何轉成關鍵字、比對已儲存的 chunk、排序,並在回應中分組。

查詢處理


search.Search(internal/search/search.go)先驗證請求,再準備關鍵字:
步驟規則
資料庫必須是已載入的資料庫名稱,否則回傳 invalid argument: "<name>" not exist
查詢q 不得為空,否則回傳 invalid argument: q is required
筆數上限1 到 100;未提供、0、負數、非數字或超過 100 時改用 10
Target空值或 keyword;其他值回傳 invalid argument: unknown target "<value>"
關鍵字q 轉小寫、依空白切分並去除重複

比對與排序


每個關鍵字都轉成不分大小寫的子字串比對(LOWER(content) LIKE '%keyword%'),只比對有效資料列(dismiss = FALSE)。chunk 只要含任一關鍵字即命中。
順序依據
1chunk 含有的不重複關鍵字數,多者在前
2資料列 id,舊者在前

子字串比對代表 go 也會命中 golang 與 google。關鍵字中的 % 與 _ 會被當作 SQL LIKE 萬用字元。轉小寫依 SQLite LOWER(),只轉換 ASCII 字母;其他文字依原樣比對。

回應格式


命中的 chunk 依來源檔分組,檔案順序依各檔第一個 chunk 在排序中出現的位置:
  1. {
  2. "keyword": [
  3. {
  4. "source": "/Users/you/.config/kuradb/notes/inbox/a.md",
  5. "matches": [
  6. { "chunk": 1, "content": "Alpha Go notes\nline two" },
  7. { "chunk": 2, "content": "Second paragraph about SQLite" }
  8. ]
  9. }
  10. ]
  11. }

欄位意義
source檔案在資料庫 inbox 內的絕對路徑
matches[].chunk該檔內從 1 起算的 chunk 編號
matches[].contentchunk 全文

資料列 id、命中數等內部排序值不會回傳。沒有命中時,HTTP API 回傳 {"keyword": []},MCP 工具回傳空物件。

相關頁面


EN