| 操作 | 数据源 |
|------|--------|
| syn list, syn search (Frontmatter) | SQLite |
| syn search --content (全文) | Ripgrep → 再查 SQLite 补充元数据 |
| syn show, syn edit | 实际 Markdown 文件 |

### 13.5 混合搜索(Hybrid Search)

**场景**:用户想搜 "Project X"(全文)且 "Status=Todo"(元数据)。

**实现逻辑**:

1. Ripgrep 搜索全文 → 返回匹配文件路径列表
2. 用路径列表查询 SQLite → 过滤 Status=Todo
3. 返回最终结果(带完整元数据)


**命令示例**:

# 混合搜索:全文包含 "kubernetes" 且状态为 todo
syn search "kubernetes" --status todo

# 混合搜索:全文包含 "设计" 且标签包含 urgent
syn search "设计" --tag urgent

# 纯元数据搜索(due-before 基于 due 字段)
syn search --type task --priority high --due-before 2024-01-15


**时间筛选参数说明**:

| 参数 | 对应字段 | 说明 |
|------|----------|------|
| --due-before | due | 截止日期早于指定日期的任务 |
| --due-after | due | 截止日期晚于指定日期的任务 |
| --created-before | created | 创建时间早于指定日期 |
| --created-after | created | 创建时间晚于指定日期 |
| --modified-before | modified | 修改时间早于指定日期 |
| --modified-after | modified | 修改时间晚于指定日期 |

**示例**:

# 查找本周内到期的任务
syn search --type task --due-after monday --due-before sunday

# 查找过去 7 天修改过的笔记
syn search --type note --modified-after "7 days ago"


### 13.6 批量操作与异步机制

针对 10,000+ 文件规模的操作优化:

**SQLite 事务批量写入**:

# ❌ 错误:单条插入 1000 次 ≈ 5秒
for item in items:
    cursor.execute("INSERT INTO resources ...", item)
    conn.commit()

# ✅ 正确:事务批量插入 1000 次 ≈ 0.05秒
cursor.execute("BEGIN TRANSACTION")
for item in items:
    cursor.execute("INSERT INTO resources ...", item)
cursor.execute("COMMIT")


**Textual 异步 Workers**:

from textual import work

class SynapseApp(App):
    @work(exclusive=True)
    async def action_batch_update_tags(self, ids: list, add_tag: str):
        """耗时操作放入后台线程,不阻塞 UI"""
        self.notify("正在批量更新标签...")
        
        # 执行文件 IO 和 DB 更新
        await processor.batch_add_tag(ids, add_tag)
        
        self.notify(f"✓ 已更新 {len(ids)} 个资源")
        self.refresh_list()


**进度反馈**:
- 操作耗时 > 500ms 时,TUI 底部状态栏显示 Spinner
- 批量操作(如 Refile 多个文件)显示进度条

---

## 14. 成功标准

1. 快速捕获到 Inbox 并高效处理
2. Johnny.Decimal 编号清晰组织(支持短 ID 和模糊匹配)
3. Git 完整审计追踪(Conventional Commits)
4. k9s 风格 TUI(列表/日历/时间线/图谱视图 + 命令面板)
5. CORE 工作流:捕获 → 组织 → 回顾 → 执行
6. 本地 Hook 优先 + GitHub Actions 远程通知
7. 仅 Markdown,仓库精简(`syn media` 处理附件)
8. Namespace 支持项目级配置
9. 10,000 资源列表 < 500ms(SQLite 索引 + 批量事务)
10. 多端同步无痛(自动 rebase + 智能字段合并)
11. Refile 时链接自动更新,永不断裂
12. 中文全文搜索精准(jieba 应用层分词)
13. 会话状态持久化,随时恢复上下文

---

## 15. 边缘情况处理

| 场景 | 处理方案 |
|------|----------|
| title 修改 | 文件名同步更新(包含 title),但链接仅使用 ID,不受影响 |
| Refile 链接断裂 | 自动全局搜索替换旧 ID → 新 ID(见 5.5) |
| 脏工作区 Refile | 拒绝操作,TUI 提供快捷 Commit/Stash 选项(见 5.5) |
| Refile 中途失败 | 前置检查确保工作区干净后,失败可安全回滚(见 5.5) |
| 短 ID 歧义 | CLI 报错列出候选项,TUI 弹窗二选一(见 3.2) |
| 并发编辑 | watchdog 实时监听 + Hash 检测(见 7.6) |
| watchdog 自激 | Git 操作期间暂停监听(SuspensionContext),避免误报(见 7.6) |
| 多端同步 | 启动 `pull --rebase`,退出 `push`,智能字段合并(见 7.4-7.5) |
| 索引损坏 | syn index rebuild 重建 |
| 大文件 | .gitignore 排除,`syn media` 上传到外部存储 |
| 耗时操作 | Textual @work 异步执行,底部显示进度(见 13.6) |
| 中文搜索噪音 | 停用词过滤 + 标点清理,减小索引体积(见 13.2) |

---

## 16. 范围外(初始版本)

**优先级低,预留设计的功能**:
- **§8 媒体管理**:初始版本仅支持外部链接,`syn media` 命令预留
- **§10 知识图谱**:初始版本不实现,预留 syn graph 接口
- **§11 邮件集成**:初始版本仅支持手动创建,API 集成预留

**明确排除的功能**:
- 完整 LLM GraphRAG(仅预留接口)
- 实时协作(多人同时编辑)
- Web/移动端
- 邮件 API 自动集成
- 自定义 FTS5 分词器(使用应用层分词替代)

---

## 附录 A:术语表
 
 
Back to Top