全文搜索
基于 SQLite FTS5 的毫秒级全文索引。10 万笔记也能瞬间检索出来。
打开搜索
- 快捷键:
Ctrl+K/Cmd+K(任意位置) - 或点击左侧边栏顶部搜索框
搜索范围
默认同时匹配:
- 笔记标题(加权更高)
- 笔记正文全文
- 标签名称
- 文件夹名称
结果呈现
┌──────────────────────────────────────────┐
│ 🔍 Rust 所有权 │
├──────────────────────────────────────────┤
│ 📄 Rust 所有权 ⭐ 标题匹配
│ Rust 通过所有权系统实现零成本内存安全…
│ #rust #编程语言 · 2 小时前
│ │
│ 📄 编程语言对比 │
│ …关键是 Rust 的【所有权】和借用,Python
│ 则依赖 GC… │
│ #编程语言 · 3 天前 │
│ │
│ 📄 每日笔记 2026-04-15 │
│ 下午学了 [[Rust 所有权]]… │
│ #每日笔记 · 昨天 │
└──────────────────────────────────────────┘- 标题精确匹配打星标记,排在最前
- 片段高亮:关键词加粗、着色
- 上下文摘要:显示命中位置前后 30 字
- 元数据:标签、更新时间
搜索语法
基础
| 语法 | 示例 | 效果 |
|---|---|---|
| 关键词 | rust | 匹配含 "rust" 的笔记 |
| 多关键词 | rust 所有权 | AND 查询,都要匹配 |
| 引号 | "Rust 所有权" | 短语精确匹配 |
| OR | rust OR python | 任一匹配 |
| NOT | rust NOT python | 含 rust 但不含 python |
高级(FTS5)
| 语法 | 示例 | 效果 |
|---|---|---|
| 前缀 | rus* | 匹配 rust / rusk / rusted |
| 列限定 | title:rust | 仅匹配标题 |
| 临近 | rust NEAR 所有权 | 两词在同一句内 |
中文分词
FTS5 默认对中文的处理不理想。Knowledge Base 内置了中文分词器:
- 基于字 unigram + bigram 混合索引
- 支持中英文混排
- 不需要外部分词服务
性能基准(M1 MacBook Pro / 本地 SQLite):
| 笔记数 | 索引大小 | 查询延迟(p50) |
|---|---|---|
| 1 千 | ~2 MB | <10 ms |
| 1 万 | ~20 MB | <50 ms |
| 10 万 | ~200 MB | <200 ms |
排序
默认按相关性(BM25 评分)排序。可切换为:
- 按更新时间(最新优先)
- 按创建时间(最老优先)
- 按标题字母序
过滤器
搜索面板左侧展开 → 高级过滤:
- 📁 按文件夹
- 🏷️ 按标签(多选)
- 📅 按日期范围
- ⭐ 只看置顶
- 🗑️ 包含回收站
搜索历史
最近 20 条搜索记录自动保存在顶部历史条,一键回溯。
技术实现
- SQLite FTS5 虚拟表:
notes_fts(title, content) - 触发器自动同步:笔记增删改 → FTS 索引自动更新
- 中文分词器:注册自定义 tokenizer,字级 + 词级混合
- 查询时使用
snippet()内置函数生成带高亮的片段