全文搜索的原理与中文搜索模式说明
Joplin 的搜索速度在同类应用里是出了名的快,秘密在底层:它用 SQLite 的全文索引(FTS)实时给所有笔记建索引。
为什么快
笔记一被创建或修改,内容就实时进入全文索引;查询直接命中索引而不是逐条扫描正文。几千上万条笔记里找一个词,基本是瞬时的。
基础查询语法
| 查询类型 | 写法 | 效果 |
|---|---|---|
| 单个词 | cat | 含这个词的笔记(不含子串匹配) |
| 多个词 | dog cat | 同时含两个词(AND 关系) |
| 短语 | "shopping list" | 词序相邻、精确匹配 |
| 前缀通配 | swim* | 命中 swim、swimming 等(通配符只能放词尾) |
| 基础模式 | /"- [ ]" | 关闭全文索引,按字面精确搜(慢但能搜符号) |
基础模式(前缀加斜杠)是搜特殊符号的正解,比如把所有未勾选的任务找出来。
中文用户必读:CJK 搜索模式
SQLite 全文索引按空格分词,天生不适合中文这类没有空格的语言。Joplin 的解法是内置了一个专用搜索模式:检测到中文、日文、韩文或泰文时自动切换,不走 FTS 但保留多词查询、过滤器等全部能力。
要知道的两个特性:
- 支持无限制通配符:
*放词头词中词尾都行(FTS 模式只允许词尾); - 大库可能变慢:不走索引的代价,且排序精确度略低——笔记量特别大时用过滤器缩小范围能明显提速。
搜索结果排序
默认按相关度排:命中词次数多的靠前,多个关键词时还考虑它们的距离。搜出意外结果可以在官方论坛反馈。
图片里的文字也能搜
OCR 之后,附件里的文字同样进入搜索范围,见OCR 图内文字识别。