
通过笔记搜索,您可以通过搜索笔记标题、内容或属性中的文本来查找笔记。您还可以选择保存搜索,这将创建一个特殊的搜索笔记,该笔记在您的导航树上可见,并将搜索结果作为子项包含在内。
1 访问搜索
2 交互
要搜索笔记,请单击工具栏上的放大镜图标或按键盘快捷键。
在搜索字符串字段中设置要搜索的文本。
除了搜索单词
ad-literam
之外,还可以搜索笔记的属性或属性。有关详细信息,请参阅以下示例。
要将搜索限制为笔记及其子项,请在 Ancestor 中设置注释。
要将搜索限制为仅几个层次结构级别(例如,查看笔记的子子项,但不查看子子项),请将深度场设置为提供的值之一。
除此之外,还可以通过添加搜索选项按钮配置搜索,如后续部分所述。
按搜索触发搜索。结果显示在搜索配置窗格下方。
“搜索和执行作”按钮仅在至少添加了一个作时才相关(如下一节所述)。
“保存到备注”将使用搜索配置创建一个新备注。有关详细信息,请参阅保存搜索结果。
3 搜索选项
从添加搜索选项部分单击要应用的搜索选项。
对于所选的每个搜索选项,搜索配置将更新以显示条目。每个搜索选项都有自己的配置。
要删除搜索选项,只需按其右侧的 X 按钮即可。
可用的选项包括:
搜索脚本
此功能允许编写一个代码笔记,该笔记将自行处理搜索。
快速搜索
搜索不会查看笔记的内容,但仍会查看笔记标题和属性、关系(基于搜索查询)。
此方法可以大大加快大型数据库的搜索速度。
包括已存档
存档笔记也将包含在结果中,否则它们将被忽略。
订购方式
允许更改结果排序的条件,例如按创建日期或按字母顺序排序,而不是按相关性排序(默认)。
也可以更改结果的顺序(升序或降序)。
限制
将结果限制为给定的最大值。
如果结果数量会很高,但代价是无法查看所有结果,这会有所帮助。
调试
这将在服务器日志中打印有关如何解析搜索表达式的其他信息(请参阅错误日志)
在详细了解搜索功能后,此功能特别有用,以便确定复杂搜索查询未按预期工作的原因。
行动
3.1 简单的笔记搜索示例
快捷键 书签:全文搜索以查找同时包含“快捷键”和“书签”的笔记。
"The Lord of the Rings" Tolkien
:全文搜索,其中“指环王”必须完全匹配。note.content *=* rings OR note.content *=* tolkien
:查找内容中包含“环”或“托尔金”的笔记。towers #book
:结合全文和属性搜索来查找包含“塔”并带有“book”标签的注释。towers #book or #author
:搜索包含“塔”并带有“书籍”或“作者”标签的笔记。towers #!book
:搜索包含“塔”且没有“书”标签的笔记。#book #publicationYear = 1954
:查找“book”标签且“publicationYear”设置为 1954 的注释。#genre *=* fan
:查找带有“流派”标签的音符,其中包含子字符串“fan”。其他运算符包括 “contains”、“starts with”、“ends with” 和 “is not equal to”。*=*=**=!=
#book #publicationYear >= 1950 #publicationYear < 1960
:使用数字运算符查找 1950 年代出版的所有书籍。#dateNote >= TODAY-30
:查找过去 30 天内带有“dateNote”标签的笔记。支持的日期值包括 NOW +- 秒、TODAY +- 天、MONTH +- 月、YEAR +- 年。~author.title *=* Tolkien
:查找与标题包含“托尔金”的作者相关的注释。#publicationYear %= '19[0-9]{2}'
:使用“%=”运算符匹配正则表达式(正则表达式)。此功能从 Trilium 0.52 开始可用。note.content %= '\\d{2}:\\d{2} (PM|AM)'
:查找提及时间的备注。正则表达式中的反斜杠必须转义。
3.2 模糊搜索
Trilium 支持模糊搜索运算符,用于查找带有拼写错误或拼写变化的结果:
#title ~= trilim
:模糊精确匹配 - 查找标题为“Trilium”的笔记,即使您输入了“trilim”(有拼写错误)#content ~* progra
:模糊包含匹配 - 查找包含“program”、“programmer”、“programming”等单词的注释,即使有轻微的拼写错误note.content ~* develpment
:尽管有拼写错误,但仍会找到包含“开发”的注释
关于模糊搜索的重要说明:
模糊搜索要求搜索词中至少包含 3 个字符
最大编辑距离为 2 个字符(需要更改字符的次数)
变音符号是规范化的(例如,“cafe”匹配“cafe”)
模糊匹配最适合查找具有轻微拼写错误或拼写变化的内容
3.3 高级用例
~author.relations.son.title = 'Christopher Tolkien'
:搜索与“克里斯托弗·托尔金”具有“儿子”关系的笔记具有“作者”关系的笔记。这可以使用以下注释结构进行建模:书
指环王
标签: “书”
关系:“作者”指向“JRR 托尔金”注释
人
J.R.R.托尔金
关系:“儿子”指向“克里斯托弗·托尔金”注释
克里斯托弗·托尔金
~author.title *= Tolkien OR (#publicationDate >= 1954 AND #publicationDate <= 1960)
:使用布尔表达式和括号对表达式进行分组。请注意,以括号开头的表达式需要在前面加上“表达式分隔符”(# 或 ~)。note.parents.title = 'Books'
:查找父级名为“书籍”的笔记。note.parents.parents.title = 'Books'
:查找祖父母名为“Books”的笔记。note.ancestors.title = 'Books'
:查找祖先名为“Books”的笔记。note.children.title = 'sub-note'
:查找带有名为“子笔记”的子项的笔记。
3.4 使用注释属性搜索
注释具有可用于搜索的属性,例如 、noteIddateModifieddateCreatedisProtectedtypetitletextcontentrawContentownedLabelCountlabelCountownedRelationCountrelationCountownedRelationCountIncludingLinksrelationCountIncludingLinksownedAttributeCountattributeCounttargetRelationCounttargetRelationCountIncludingLinksparentCountchildrenCountisArchivedcontentSizenoteSizerevisionCount
这些属性可以通过前缀访问,例如 .note.note.type = code AND note.mime = 'application/json'
3.5 排序和限制数量
#author=shmaur orderBy #publicationDate desc, note.title limit 10
此示例将:
查找带有作者标签“shmaur”的笔记。
按降序对结果进行排序。
publicationDate
如果发布日期相等,则用作辅助排序。
note.title
将结果限制为前 10 个音符。
3.6 不包含
有些查询只能用不包含来表达:
#book AND not(note.ancestor.title = 'shmaur 文档')
此查询查找不在“shmaur 文档
”子树中的所有笔记。
4 渐进式搜索策略
Trilium 使用渐进式搜索策略,首先执行精确匹配,然后在需要时添加模糊匹配。
4.1 渐进式搜索的工作原理
第 1 阶段 - 完全匹配:当您搜索时,Trilium 首先查找与您的搜索词完全匹配。这可以处理绝大多数搜索 (90%+) 并几乎立即返回结果。
第 2 阶段 - 模糊回退:如果第 1 阶段没有找到足够的高质量结果(相关性分数低于 5 个结果),Trilium 会自动添加模糊匹配以查找有拼写错误或拼写变化的结果。
结果排序:无论单个分数如何,完全匹配始终出现在模糊匹配之前。这可确保当您搜索“项目”时,包含确切单词“项目”的注释将出现在包含“项目”或“投影”等相似单词的注释之前。
4.2 渐进式搜索行为
速度:大多数搜索仅使用精确匹配完成
排序:精确匹配出现在模糊匹配之前
回退:当精确匹配返回的少于 5 个结果时,模糊匹配将激活
识别:结果指示它们是完全匹配还是模糊匹配
4.3 搜索性能
搜索系统规格:
内容大小限制:每个笔记 10MB(之前为 50KB)
编辑模糊匹配的距离计算
快速搜索中的无限滚动
5 在引擎盖下
5.1 标签和关系快捷键
按标签搜索的“完整”语法为:
note.labels.publicationYear = 1954
对于关系:
note.relations.author.title *=* Tolkien
但是,常见的标签和关系搜索具有快捷语法:
#publicationYear = 1954
#author.title *=* Tolkien
5.2 分离全文部分和属性部分
搜索语法允许将全文搜索与基于属性的搜索相结合。例如,包含:tolkien #book
全文令牌 -
tolkien
属性表达式 -
#book
Trilium 通过查找表示属性和属性的某些特殊字符或单词(例如,#、~、注释)来检测全文搜索和属性/属性搜索之间的分离。如果您需要在全文搜索中包含这些内容,请使用反斜杠转义它们,以便将它们处理为常规文本:
"note.txt"
\#hash
#myLabel = 'Say "Hello World"'
5.3 转义特殊字符
特殊字符可以用引号括起来,也可以用反斜杠转义,以便在全文搜索中使用:
"note.txt"
\#hash
#myLabel = 'Say "Hello World"'
支持三种类型的引号:单引号、双引号和反引号。
5.4 类型强制
标签值在技术上是字符串,但可以强制进行数字比较:
note.dateCreated =* '2019-05'
这将查找在 2019 年 5 月创建的注释。数字运算符,例如将字符串值转换为数字以进行比较。#publicationYear >= 1960
6 从 URL 自动触发搜索
您可以打开 Trilium 并通过在 URL 中包含搜索 url 编码字符串来自动触发搜索:
http://localhost:8080/#?searchString=abc
7 搜索配置
7.1 参数
参数 | 价值 | 描述 |
---|---|---|
MIN_FUZZY_TOKEN_LENGTH | 3 | 模糊匹配的最小字符数 |
MAX_EDIT_DISTANCE | 2 | 允许的最大字符更改 |
RESULT_SUFFICIENCY_THRESHOLD | 5 | 模糊回退前的最小精确结果 |
MAX_CONTENT_SIZE | 10MB | 搜索处理的最大笔记内容大小 |
7.2 限制
搜索的笔记内容限制为每个笔记 10MB,以防止出现性能问题
超过此限制的注释仍将包含在标题和属性搜索中
模糊匹配需要至少 3 个字符的标记