2.1.7 搜索

通过笔记搜索,您可以通过搜索笔记标题、内容或属性中的文本来查找笔记。您还可以选择保存搜索,这将创建一个特殊的搜索笔记,该笔记在您的导航树上可见,并将搜索结果作为子项包含在内。

1 访问搜索

2 交互

要搜索笔记,请单击工具栏上的放大镜图标或按键盘快捷键

  1. 搜索字符串字段中设置要搜索的文本。

    1. 除了搜索单词 ad-literam 之外,还可以搜索笔记的属性或属性。

    2. 有关详细信息,请参阅以下示例。

  2. 要将搜索限制为笔记及其子项,请在 Ancestor 中设置注释。

    1. 如果从提升的笔记工作区触发搜索,也会预填充此值。

    2. 要搜索整个数据库,请将值留空。

  3. 要将搜索限制为仅几个层次结构级别(例如,查看笔记的子子项,但不查看子子项),请将深度场设置为提供的值之一。

  4. 除此之外,还可以通过添加搜索选项按钮配置搜索,如后续部分所述。

  5. 搜索触发搜索。结果显示在搜索配置窗格下方。

  6. “搜索和执行作”按钮仅在至少添加了一个作时才相关(如下一节所述)。

  7. “保存到备注”将使用搜索配置创建一个新备注。有关详细信息,请参阅保存搜索结果

3 搜索选项

从添加搜索选项部分单击要应用的搜索选项。

  • 对于所选的每个搜索选项,搜索配置将更新以显示条目。每个搜索选项都有自己的配置。

  • 要删除搜索选项,只需按其右侧的 X 按钮即可。

可用的选项包括:

  1. 搜索脚本

    1. 此功能允许编写一个代码笔记,该笔记将自行处理搜索。

  2. 快速搜索

    1. 搜索不会查看笔记的内容,但仍会查看笔记标题和属性、关系(基于搜索查询)。

    2. 此方法可以大大加快大型数据库的搜索速度。

  3. 包括已存档

    1. 存档笔记也将包含在结果中,否则它们将被忽略。

  4. 订购方式

    1. 允许更改结果排序的条件,例如按创建日期或按字母顺序排序,而不是按相关性排序(默认)。

    2. 也可以更改结果的顺序(升序或降序)。

  5. 限制

    1. 将结果限制为给定的最大值。

    2. 如果结果数量会很高,但代价是无法查看所有结果,这会有所帮助。

  6. 调试

    1. 这将在服务器日志中打印有关如何解析搜索表达式的其他信息(请参阅错误日志

    2. 在详细了解搜索功能后,此功能特别有用,以便确定复杂搜索查询未按预期工作的原因。

  7. 行动

    1. 除了搜索之外,还可以应用一些操作,例如为搜索匹配的笔记添加标签或关系。

    2. 与其他搜索配置不同,这里可以多次应用相同的操作(即为了能够将多个标签应用到注释中)。

    3. 给出的操作与批量操作中的操作相同,这是在笔记树中直接操作注释的另一种选择。

    4. 定义作后,首先按搜索检查匹配的笔记,然后按搜索并执行作触发作。

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

此示例将:

  1. 查找带有作者标签“shmaur”的笔记。

  2. 按降序对结果进行排序。publicationDate

  3. 如果发布日期相等,则用作辅助排序。note.title

  4. 将结果限制为前 10 个音符。

3.6 不包含

有些查询只能用不包含来表达:

#book AND not(note.ancestor.title = 'shmaur 文档')

此查询查找不在“shmaur 文档”子树中的所有笔记。

4 渐进式搜索策略

Trilium 使用渐进式搜索策略,首先执行精确匹配,然后在需要时添加模糊匹配。

4.1 渐进式搜索的工作原理
  1. 1 阶段 - 完全匹配:当您搜索时,Trilium 首先查找与您的搜索词完全匹配。这可以处理绝大多数搜索 (90%+) 并几乎立即返回结果。

  2. 第 2 阶段 - 模糊回退:如果第 1 阶段没有找到足够的高质量结果(相关性分数低于 5 个结果),Trilium 会自动添加模糊匹配以查找有拼写错误或拼写变化的结果。

  3. 结果排序:无论单个分数如何,完全匹配始终出现在模糊匹配之前。这可确保当您搜索“项目”时,包含确切单词“项目”的注释将出现在包含“项目”或“投影”等相似单词的注释之前。

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

  1. 全文令牌 -tolkien

  2. 属性表达式 -#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_LENGTH3模糊匹配的最小字符数
MAX_EDIT_DISTANCE2允许的最大字符更改
RESULT_SUFFICIENCY_THRESHOLD5模糊回退前的最小精确结果
MAX_CONTENT_SIZE10MB搜索处理的最大笔记内容大小

7.2 限制

  • 搜索的笔记内容限制为每个笔记 10MB,以防止出现性能问题

  • 超过此限制的注释仍将包含在标题和属性搜索中

  • 模糊匹配需要至少 3 个字符的标记

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

目录关闭