参考
搜索内部机制
分词器与前缀展开规则,以及长 token 的已知边界。
本页面解释快捷面板、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。守护进程下次启动时检测到版本不一致,会自动重建索引,期间查询返回的结果集合在补齐之前是不完整的。详见 全文搜索 — 索引生命周期。