Skip to content

Session Query zh

pawaca edited this page Aug 30, 2026 · 3 revisions

会话查询

上游会话搜索和查询系统在 Edge 中的适配。

上游参考:会话查询文档

上游提供了什么

会话查询提供跨会话语料库的全文搜索。由两个包组成:

  • dsh-session-query — 服务定义:查询词汇表、搜索文档提取(buildSessionEventSearchDocuments)、session/event 过滤和关系追踪。
  • dsh-session-query-sqlite — SQLite FTS 提供者:维护随每个事件更新的全文索引,支持带游标分页的跨 session 排名搜索。

ctx.sessionQuery 服务由 apiproxy 层的 session.search 消费,后者处理结果去重、过期代重启和逐提供者页大小探测。

Edge 改了什么

简化替换 线性扫描搜索

Edge 没有安装上游的 SessionQueryEngine 或 SQLite FTS 提供者。searchApiSessions() 实现了有界线性扫描:

  • 扫描最近 32 个 session(MAX_SEARCH_SESSIONS
  • 每个 session 加载最多 512 个事件(MAX_SEARCH_EVENTS_PER_SESSION)或 256 KB
  • 使用上游的 buildSessionEventSearchDocuments() 提取搜索文档
  • 与规范化查询字符串匹配

复用了上游的文本提取逻辑,但完全绕过了 FTS 索引。

Edge 没有改什么

  • 搜索文档提取 buildSessionEventSearchDocuments() — 上游逻辑,原样复用
  • 搜索结果 schema(带 snippet 的 SessionSearchItem)— 上游格式
  • 暴露给客户端的 session.search API 契约

性能特征

搜索延迟

每次搜索最多扫描 32 session × 512 事件 = 16,384 个事件。事件从 DO SQL(活跃 session)或持久化(冷 session)加载。线性扫描无索引——延迟随 session 数量和大小缩放。对于只有几十个 session 的典型部署,在几十毫秒内完成。

搜索覆盖限制

超过 512 事件的 session 被完全跳过(标记为 hasMore)。仅搜索最近 32 个 session。没有跨 session 排名——结果按 session 时间倒序返回,不按相关性排序。

架构总结

组件 分类 Edge 代码
文本提取 复用 上游 buildSessionEventSearchDocuments()
搜索引擎 替换 searchApiSessions() 线性扫描
FTS 索引 未安装

关键观察:Edge 用简单性换搜索质量。避开了 FTS 索引及其 SQLite 依赖;对于 session 数量有限的个人单用户部署,搜索"够用"。文本提取是上游代码,后续升级到完整 FTS 只需安装提供者插件。

TODO

评估 DO SQL FTS。#92)Durable Objects 支持 SQLite(含 FTS5)。上游的 dsh-session-query-sqlite 提供者可能可以直接安装,前提是其 SQLite 访问模式与 DO 的 SQL API 兼容。这将用索引搜索替换线性扫描,解除 32 session 和 512 事件的限制。

English

中文

Clone this wiki locally