本文档介绍了0.43及更老版本中使用的搜索语法。有关最新语法,请参见搜索。
Trilium支持在笔记中搜索。有几种搜索笔记的方法:
- 本地搜索 - 在当前显示的笔记中搜索。按
CTRL - F
打开搜索对话框。在服务器版本中,这由浏览器处理;在桌面版(Electron版)中,有一个单独的对话框。 - 全文搜索 - 搜索文本和代码笔记内容。由于此操作是通过数据库搜索实现的,因此仅适用于不受保护的笔记(无论您是否处于受保护的会话中都没关系)
- 属性搜索 - 例如,您可以搜索具有特定标签的笔记 - 请参阅下面的属性查询语法。
- 您可以将搜索字符串(由全文搜索或属性搜索组成)保存到被称作的"saved search"笔记中。如果展开此笔记,您将看到搜索结果作为子笔记。
- 保存的搜索还可以通过关系引用脚本 - 展开后,脚本将提供结果列表
您可以通过单击左侧的放大镜图标或按CTRL - S
键盘[快捷键)(./键盘快捷键.md)来激活搜索。
全文
每当搜索字符串不是以@
(用于属性搜索)或=
(用于脚本保存的搜索)开头时,就会触发全文搜索。
全文搜索未归档的未删除,未受保护的文本笔记和代码笔记的标题和内容。
输入字符串由空格分隔符标记,并且每个单独的token(单词)必须出现在标题或内容中。如果您不希望这种自动标记,可以在搜索中用双引号引起来,例如"hello world"
将搜索完全匹配。
属性查询语法
标准属性
在这里,您可以按标准属性进行查询:
@abc
- 返回带有标签abc的笔记@!abc
- 返回没有标签abc的笔记@year=2019
- 匹配具有标签year
的值为2019
的笔记@year!=2019
- 匹配带有标签year
,但值不是2019或根本没有标签year
的笔记。- 如果您想表达条件: 笔记必须带有
year
标签,但值不是2019,则可以使用@year @year!=2019
- 如果您想表达条件: 笔记必须带有
@year<=2000
- 返回标签year
值为2000或更小的笔记。>
,<
,>=
和<=
d都是支持的。- 在这种情况下,参数可以解析为数字,因此可以进行按数字比较。但是也可以以相同的方式按字典顺序比较字符串。如下所示,这对于比较日期很有用。
@rock @pop
- 匹配同时带有rock
和pop
标签的笔记@rock and @pop
是另一种替代语法
@rock or @pop
- 只能有一个标签- 在搜索字符串中使用两个运算符的情况,
and
优先级高于or
- 在搜索字符串中使用两个运算符的情况,
@frontMan=*John
- 匹配frontMan
标签以"John"开头的笔记。还有!=*
b表示"不以…"开头,*=
表示"以…结尾"和!*=
"不以…结尾",*=*
表示"包含"和!*=*
表示"不包含"
虚拟属性
也可以通过所谓的"虚拟属性"进行查询:
dateCreated
- 笔记创建日期的本地日期,格式为YYYY-MM-DD HH:mm:ss.sss + OOPP,其中OOPP是相对于UTC的小时和分钟偏移量(例如,中欧时间为"+0100")dateModified
- 在YYYY-MM-DD HH:mm:ss.sss + OOPP中对最后一个音符进行修改的本地日期utcDateCreated
- 笔记创建日期的UTC日期,格式为YYYY-MM-DD HH:mm:ss.sssZutcDateModified
- 最后一个笔记的修改日期的UTC日期,格式为YYYY-MM-DD HH:mm:ss.sssZnoteId
isProtected
- 如果笔记受保护,则为1,否则为0title
- 如果要单独搜索标题,则很有用content
type
- ,text
,code
,,或者imagefilesearchrelation - map
mime
- 例如text/html
表示文字笔记text
- 标题和内容的全文属性- 例如
@text*=*Hello
。这样您就可以同时搜索文本和属性。
- 例如
isArchived
- 仅过滤归档笔记,@!archived
然后仅过滤未归档的笔记。请注意,此过滤器在OR关系中不起作用,它始终为AND。in
- 例如,@in=VuvLpfAPx2L9
将仅过滤那些具有noteId为VuvLpfAPx2L9
的笔记作为祖先之一的笔记 - 即笔记在VuvLpfAPx2L9
的子树中。使用否定运算符 -@in!=VuvLpfAPx2L9
将过滤没有笔记VuvLpfAPx2L9
作为其祖先的笔记。始于Trilium 0.37版本
顺序和限制
可以通过一个或多个属性对结果进行排序,例如,@orderBy=year, - genre
将按year
标签的升序对笔记进行排序,然后按genre
标签的降序(由于-
符号)对笔记进行排序。
您也可以使用例如:@limit=1
仅返回第一个结果来限制结果的数量。如果没有limit
,则返回所有笔记。
日期比较
属性值是无类型的字符串,这意味着尽管您可以将诸如数字或日期之类的任何值保存到其中,但是Trilium并不真正知道它是什么类型的值,因此也无法对其进行正确处理。
幸运的是,如果我们坚持以YYYY-MM-DD格式存储日期,我们仍然可以做很多事情,因为这些日期可以作为字符串正确地比较 - 例如@dateCreated>=2015 - 01 - 01
,即使Trilium仅进行字符串比较,也将返回自2015年以来创建的笔记。
如果要查找2015年创建的笔记该怎么办?您可以像这样使用"以…开头"运算符(=*
):@dateCreated=*2019
- 这将匹配带有以"2019"开头的标签的笔记,该年份创建的所有笔记都将满足。
智能过滤器
Trilium支持一些特殊值,这些特殊值可能会帮助您进行一些搜索查询:
NOW
表示此刻且达到秒精度,例如2019 - 04 - 01 10:12:54
NOW - 3600
表示1小时前
TODAY
表示今天且精度为天,例如2019 - 04 - 01
TODAY - 1
意味着昨天,TODAY+1
意味着明天
MONTH
表示本月,例如2019 - 04
MONTH - 1
指上个月 - 即2019 - 03
YEAR
表示当前年份,例如2019
YEAR - 1
表示去年 - 2018年
使用此方法,您可以创建查询,例如:
@dateModified>=NOW - 3600
- 告诉我过去一小时内更改过的笔记@dateCreated=*TODAY - 1
- 告诉我昨天整个期间创建的笔记
保存的搜索
Trilium提供了一种将常用搜索另存为笔记树中的笔记的方法。搜索结果将作为此"saved search"笔记的子笔记出现。您可以看到它是如何工作的:
使用脚本关系保存搜索
如果保存的搜索字符串以开头=
,则将以下字符串用作关系名称,并执行目标脚本以获取音符结果列表。
因此,假设搜索字符串为=handler
,然后Trilium尝试找到具有名称为"handler"关系的保存笔记。关系应该指向稍后执行的脚本 - 脚本应该返回的那些应作为搜索结果的笔记列表。对于正常的属性/全文搜索不能满足所有需求的用例,可以选择这个方法。
从URL自动触发搜索
像下面的示例一样,打开Trilium将打开搜索窗格并自动触发搜索"abc":
http://localhost:8080/#search=abc