用 Joplin 查询语法定位待办与研究笔记

当笔记数量增加,单纯输入一个关键词往往会得到太多结果。Joplin 的搜索可以把“在哪个笔记本”“是否未完成待办”“什么时候创建”“有没有 PDF 附件”等条件组合起来。要让查询可靠,首先需要知道这些条件怎样连接,以及什么时候搜索会换用另一种工作方式。

本文依据 Joplin 官方 Searching 文档 编译,覆盖其文字正文中的检索方式、全部过滤器、排序和快捷跳转。原页未署个人作者,页脚版权为 Laurent Cozic。核对日期为 2026 年 10 月 5 日;没有实际搜索用户笔记,也没有执行本文查询。

Joplin查询组合示意:笔记本范围、类型状态、标签日期与正文附件逐层限定;默认AND,any:1为OR,多个notebook条件例外使用OR。
把需求写成可解释的查询条件。未完纪原创技术示意图,依据 Joplin 官方帮助绘制。

先分清全文搜索、基本搜索和中文搜索

官方文档说明,Joplin 使用 SQLite 的 FTS4 全文搜索扩展,实时为笔记内容建立索引,因此一般检索可以很快返回结果。全文搜索的优势来自分词和索引,但它会忽略许多非字母字符;“查一个词”和“查一串原样字符”因此不是一回事。

SQLite FTS 的传统词边界依赖空格、制表符和标点,不能妥善适应所有语言。Joplin 检测到中文、日文、韩文或泰文时,会启用不使用 FTS 的自定义搜索方式。它仍支持多词和过滤器,却可能在大量笔记中变慢,而且没有同样的 BM25 相关性排名表现。在这种方式下,星号的位置也不再受普通 FTS 前缀搜索的限制,swim*、*swim 与 ast*rix 都可以使用。

不要把自动选择的非 FTS 语言搜索与手动加斜杠的“基本搜索”混为同一个操作。前者解决语言分词问题,后者用于需要保留特殊字符的查询。本文不会承诺中文与英文查询拥有相同速度、分词结果或排序。

四种基础查询和一个特殊字符入口

想查什么 查询 含义
单个词 cat 普通 FTS 按完整词匹配;不会仅因 cat 是 cataclysmic 的子串而匹配。
多个词同时出现 dog cat 两词都要出现,可以不相邻,也不必保持输入顺序。
连续短语 "shopping list" 词语按该顺序相邻;不能用中间夹着其他词的句子替代。
指定前缀 swim* 普通 FTS 可匹配 swim、swimming、swimsuit 等。
正文中的未勾选复选框 /"- [ ]" 以斜杠进入基本搜索,检索这段标记字符。

普通 FTS 的星号只适合作为词尾通配符:放在开头的 *swim 会忽略前面的星号;放在中间的 ast*rix 会把星号当字面字符处理。前面提到的中文等语言自定义搜索是明确例外,不能用其中一种模式的实验结果推断另一种。

如果要查代码、Markdown 标记或其他非字母字符,在整个查询前加 / 切换到基本搜索。它会失去 FTS 的速度优势,有些查询甚至会非常慢,适合在清楚自己寻找什么字符时使用。

用过滤器限定笔记范围

负号既能排除文本词,也能否定过滤条件。-spam 排除包含 spam 的笔记,office -trash 要求出现 office 并排除 trash。标题、正文、标签和笔记本各有对应入口:

过滤器 示例 作用
title: / body: title:hello -body:world 标题包含 hello,正文不含 world。可用 title:"hello world" 限定标题内的文字。
tag: tag:office tag:important 同时具有两个标签。
排除标签 tag:office -tag:spam 具有 office,但没有 spam 标签。
标签通配符 tag:be*ful 按通配形式匹配标签名。
有无标签 tag:* / -tag:* 分别查有标签、没有任何标签的笔记。
notebook: notebook:books 限定在 books 及其所有子笔记本内。
笔记本通配符 notebook:wheel*time 按通配形式匹配笔记本。

这些通配示例来自过滤器本身的语法说明,不能把它们与普通 FTS 文本词的“只允许末尾星号”规则混成一条统一规则。查找结果异常时,要先确认星号属于文本词、标签名还是笔记本名。

默认是同时满足,笔记本条件是例外

any:0 是默认值,要求所有条件满足。例如 any:0 cat dog 查同时出现 cat 和 dog 的笔记;any:1 cat dog 则查出现其中任意一个的笔记。同理,any:1 tag:office tag:spam 表示具备任意一个标签。

多个 notebook: 条件总是用 OR 连接,因为一篇笔记不可能同时归属两个不同的笔记本。例如同时给出 books 和 papers 两个笔记本,含义是查其中任一个范围;查询中的其他过滤条件仍需按整体规则理解。不要因为默认是 AND,就把两个笔记本条件理解成不存在的“共同归属”。

编者说明:any:1 会改变条件组合的语义。原文没有在这里提供任意括号分组的布尔查询语法,因此不要自行把复杂的 SQL、搜索引擎语法或括号表达式搬进 Joplin。需要“项目范围 AND 两个标签之一”时,先用小样本核查实际行为,必要时拆成两次明确的查询。

日期过滤:下界包含当天,上界通常用否定表达

created:、updated: 和 due: 分别限制创建时间、更新时间和待办到期时间。日期可以写成 YYYYMMDD,也可以按文档示例使用年份或年月;还可以相对于 day、week、month、year 表达。

查询 官方语义
created:20201218 创建于 2020 年 12 月 18 日或之后。
-updated:20201218 更新于 2020 年 12 月 18 日之前。
created:20200118 -created:20201215 包含 1 月 18 日,下界以后,且严格早于 12 月 15 日。
created:202001 -created:202003 2020 年 1 月起,到 3 月之前,即 1、2 月范围。
updated:1997 -updated:2020 1997 年起,到 2020 年之前。
created:day-2 相对当前日,查最近两天范围内创建的笔记;不要擅自解释为精确 48 小时计时器。
updated:year-0 本年更新过的笔记。
-due:day+7 官方用来查已到期或未来七天内到期的待办。
-due:day-5 官方用来查已逾期超过五天的待办。

这里的 2020 年、1997 年等是原文的历史示例,不代表当前年份。尤其要留意否定日期:-created:20201215 不包含 12 月 15 日,不能把它写成“截至 15 日全天”。使用相对日期时,每天重新执行的范围也会随当前日期移动。

待办状态与正文复选框不是同一个字段

type:note 限定普通笔记,type:todo 限定 Joplin 待办条目。iscompleted:1 查完成的待办,iscompleted:0 查未完成的待办。这些是条目的类型和完成状态。

相比之下,/"- [ ]" 查的是正文里的 Markdown 字符。一个普通笔记可以包含多个未勾选复选框,而不属于 Joplin 的 todo 类型;一个 todo 条目的完成属性,也不能从正文有没有这串字符直接推断。选择查询方式时,先确认自己的任务记录方式。

编者新增组合示例:假设项目笔记本叫 project,查询其中尚未完成、从今天起且早于七天后日期边界到期的待办,可以分步组合:

notebook:project type:todo iscompleted:0 due:day+0 -due:day+7

这里增加正向下界,是为了把已经逾期的条目排除在这份“接下来要到期”的清单之外。若要查看官方所说的“已到期或即将到期”,可按原示例使用负向上界,再配合类型和完成状态。不同范围应分别命名,避免一份清单同时被解释成“只看未来”和“包括所有逾期”。这些组合仅经过静态语义审查,未在真实库中运行。

附件、来源、位置与笔记 ID

过滤器 示例 说明
resource: resource:image/jpeg 笔记具有 JPEG 附件。
附件排除 -resource:application/pdf 笔记没有 PDF 附件。
附件通配 resource:image/* 笔记含任意图片类型的附件。
sourceurl: sourceurl:https://www.google.com 按笔记来源 URL 过滤。
来源通配 sourceurl:*joplinapp.org 按通配形式匹配来源 URL。
id: id:9cbc1b4f242043a9b8a50627508bccd5 按给定笔记 ID 查询;这里保留官方示例 ID,不是本次用户笔记。
latitude:、longitude:、altitude: latitude:40 -latitude:50 按位置字段过滤;示例为纬度大于等于 40、严格小于 50。

编者新增组合示例:整理一个研究项目时,notebook:research tag:review resource:application/pdf 表示在 research 及子笔记本中,查带 review 标签且含 PDF 附件的笔记。这里检索的是附件的 MIME 类型条件,不应据此承诺已经对 PDF 内每个字符完成全文识别。

终端、错误过滤器与结果排序

在 Joplin 终端客户端里,包含否定过滤器的搜索要用 -- 避免被当成命令选项。官方示例是:

:search -- "-tag:tag1"

这是 Joplin 终端应用内的命令形式,不是要求直接粘贴到 PowerShell 或系统 shell 中。它只表达查询,本文没有运行它。

拼错的过滤器不会总是以清晰报错结束:官方说明,不正确的过滤条件会被当成短语搜索。因此“没有结果”可能来自拼写错误,也可能来自条件确实没有交集。排查时先只保留关键词,再逐个加回笔记本、标签、类型与日期,观察是哪一个条件改变了结果。

搜索结果按相关性排序。官方说明中,词项出现次数和多词之间的距离都影响排序,并提醒排名行为仍带有实验性。不要把结果顺序当成创建时间、截止日期或人工优先级。中文等非 FTS 路径也不能直接套用 FTS 的 BM25 排名预期。

已知目标时,用 Goto Anything 更快

桌面应用按 Ctrl+P,macOS 按 Cmd+P,可以打开 Goto Anything。输入笔记标题或部分内容以跳转;输入 # 加标签名定位标签,输入 @ 加笔记本名定位笔记本。也可以从菜单栏的 Go 菜单打开。它适合快速到达已知目标;需要筛出一组符合业务条件的条目时,再使用上面的完整查询。

原文末尾另附视频教程。本文核对的是官方页面文字内容,未把视频内容加入已核验范围。由于页面是滚动帮助文档,没有用页脚年份推定首次发表日期,也没有对某个安装版本宣称测试通过。

来源:Joplin 官方 Searching。原页 Copyright © 2016-2026 Laurent Cozic;中文翻译与编辑补充:未完纪。流程图为未完纪原创。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容