搜索与知识互联
Memos 的两个核心价值——找得到与连得上——分别由全局搜索接入和出站知识网链接提供。两者都复用既有管线,没有为 memo 引入新的解析代码。
接入全局搜索
Memo 是全局搜索的第五种结果类型,与任务、草稿、文档、决策、Wiki 并列:
- Web 搜索对话框提供「备忘」筛选标签,结果按类型分组展示,图标与分组标签与其他类型一致;点击结果行跳转到
/memos?date=<day>当日视图 - 服务端
/api/search的类型白名单包含memo(此前仅四类,曾会拒绝type=memo) - CLI:
backlog search --json输出新增 memo 摘要形状;纯文本输出则跳过 memo(与 Wiki 结果一致视为 Web-only 类型)
由于 memo 刻意不进入 ContentStore 快照,搜索索引通过注入的 loader 直接读取 backlog/memos/ 语料。刷新由「stat 签名 + 500ms 语料 TTL」双门控:签名未变化时只做一次轻量目录扫描并跳过重读,签名变化(增删改)才后台全量重建索引(重载不阻塞当前搜索)。因此启动后新捕获的 memo 无需重启服务即可搜到:后台重载完成后的第一次搜索即命中;触发重载的那一次搜索仍可能返回旧结果。
出站知识网链接
Memo 正文经共享的 MermaidMarkdown 渲染器输出,自动获得两套既有链接机制:
- 裸实体 ID:正文中写出的
back-123、doc-5、decision-3等 ID 经实体索引自动转为可点击链接,点击以客户端导航打开对应实体 - Wiki 链接:
path(支持alias别名语法)解析为 Wiki 页面链接 - 行内代码中的 ID 不会被改写;无法唯一解析的 ID 原样显示为纯文本
- ID 区间与斜杠列表:
back-101~105形式的区间、back-101/102/103形式的斜杠列表同样会被识别并渲染为单个展开触发器,下拉中列出区间内每个 ID 的链接;#话题#闭合语法被识别为话题标签而非实体链接
由此,随手记下的「相关任务 back-123」在 Web 界面里就是一条活链接;一段 back-101~105 也能一键展开整段区间。
只出站、不入站
按设计 memos 不是链接目标:没有 /memo/:id 详情路由、实体类型联合中不含 memo、也不支持 memo 对 memo 的链接。这是刻意取舍——memo 是轻量收件箱,而非知识网的常驻节点;需要被引用的内容应提升为任务或文档。
实时同步
任何入口(CLI、Web、MCP、HTTP API)的 memo 写入都会广播 memos-updated WebSocket 事件:/memos 页面即时刷新卡片流与日历计数,其他页面按各自的数据刷新管线处理。搜索索引的刷新不走这条广播,而是由上文所述的签名 + TTL 双门控机制触发。