UniClipboard
参考

搜索内部机制

分词器与前缀展开规则,以及长 token 的已知边界。

在 GitHub 上编辑

本页面解释快捷面板、uniclip search CLI 共用的本地搜索索引在分词层面的行为。普通使用请看 全文搜索

前缀展开按 token 自身决策

复制内容入索引时,每条 entry 会被切成一组词级 token(按 Unicode word boundaries、_ - . /、camelCase 边界切分),然后再为每个 token 决定是否生成"前缀子 token",以支持你输到一半就能命中。

这条决策是按 token 自身长度+字符类型做的,按字段类型:

token 特征索引行为
长度 3..32 且 非 CJK索引整词 + 长度 3..(len-1) 的所有前缀
长度 ≥ 4,CJK 字符走重叠 bigram 路径,不展开前缀
长度 < 3索引整词,不展开前缀
长度 > 32 且无分隔符只索引整词,不展开任何前缀

带来的效果:

  • 复制 localhost:3000,搜 loca 命中(localhost 这个子 token 走前缀展开)
  • 复制 apiUserManager,搜 api 命中(camelCase 拆分后的子 token 都展开)
  • 复制 192.168.1.1:8080,搜 192.168 命中(整段进入候选 token 后展开)

已知边界:长 opaque 字符串只能整串搜

长度大于 32 且不含分隔符(_ - . / 等)的字符串—典型的 base64、JWT、长 hash、整条 URL 串—只能按完整字符串搜索,不支持片段搜索

理由:HMAC 索引下要支持任意片段必须做 n-gram / 滑动窗口 / SSE 之一,三种都会显著放大索引体积或削弱加密强度。剪贴板场景下这类内容比例小,且少有"按片段找"的需求,不值得这个代价。

如果你确实需要在一段长 token 里按片段定位,可以先用整串搜命中条目,再在原文里用浏览器/编辑器查找。

索引版本

任何分词规则的变化(例如本文档描述的 token-级前缀展开)都会 bump CURRENT_INDEX_VERSION。守护进程下次启动时检测到版本不一致,会自动重建索引,期间查询返回的结果集合在补齐之前是不完整的。详见 全文搜索 — 索引生命周期

本页目录