Appearance
捷径
捷径 提供了一种简单灵活的定义 Memos 的查询条件的方式。通过捷径,你可以将复杂的查询条件封装为可重复使用的查询格式。这很便于快速使用标签、可见性、创建日期等属性快速查询记录。
在这篇文档中,我们将会聚焦于 如何编写过滤条件,并为不同的用例举例。
如何编写过滤器
捷径中的 filter 字段是你定义的筛选条件,并且只有当记录全部满足条件时才会被选中。filter 使用 CEL(通用表达式语言) 语法来组合各种运算符和查询条件。
过滤器中的关键组成部分
- 查询条件:这些是你想要过滤的备忘录的字段或属性。
- 运算符:定义了如何比对过滤条件(例如等于、不等于、大于)。
- 逻辑运算符:允许你使用逻辑运算(AND、OR、NOT)将多个条件组合在一起。
查询条件和支持的运算符
| 查询条件 | 支持的运算符 |
|---|---|
tag | in |
visibility | ==, !=, in |
content | contains, ==, !=, |
create_time | ==, !=, <, >, <=, >= |
update_time | ==, !=, <, >, <=, >= |
支持的查询条件
tag:分配给记录的标签列表(例如tag in ["标签1", "标签2"])。
visibility:记录的可见性(例如visibility in ["PUBLIC"])。
content:记录的内容(例如content.contains("笔记"))。
create_time:创建记录的时间戳(例如create_time == "2023-01-01T00:00:00Z")。
update_time: 更新记录的时间戳 (例如update_time > "2023-01-01T00:00:00Z")。
支持的运算符
- 比较运算符
==: 等于 (例如create_time == "2023-01-01T00:00:00Z")。
!=: 不等于 (例如visibility != "PRIVATE")。
<: 小于 (例如create_time < "2023-01-01T00:00:00Z")。
>: 大于 (例如update_time > "2023-01-01T00:00:00Z")。
<=: 小于等于 (例如create_time <= "2023-01-01T00:00:00Z")。
>=: 大于等于 (例如update_time >= "2023-01-01T00:00:00Z")。
- 集合运算符
in: 用于检查一个元素是否属于一个集合 (例如tag in ["标签1", "标签2"])。
- 字符串运算
contains: 用于检查一个字符串中是否包含给定子串 (例如content.contains("日记"))。
- 逻辑运算符
&&: 逻辑与,用于组合多个条件 (例如tag in ["tag1", "tag2"] && visibility == "PUBLIC")。
||: 逻辑或,用于组合多个条件,其中任意条件为真都将满足此查询 (例如tag in ["标签1", "标签2"] || visibility == "PRIVATE")。
!: 逻辑非,用于给查询条件取反 (例如!content.contains("日记"))。
编写过滤器
下面是一些示例,展示了如何使用不同的运算符和条件来编写过滤器:
1. 简单的标签过滤
这个过滤器选中了包含标签 标签1 或 标签2 的记录。
tag in ["标签1", "标签2"]2. 通过标签和可见性过滤
这个过滤器选中了具有标签 标签1 或 标签2的,同时 可见性设置为 PUBLIC 的记录。
tag in ["标签1", "标签2"] && visibility == "PUBLIC"3. 使用 OR 进行多标签过滤
这个过滤器选中了具有 标签1 或 标签2 或 标签3 或 标签4 的记录。
tag in ["标签1", "标签2"] || tag in ["标签3", "标签4"]4. 使用 AND 和 OR 组合复杂的条件
这个过滤器选中了满足如下条件的记录:
- 有
标签1或标签2标签。
- 并且 创建时间早于
2023-01-01。
- 或者 可见性是
PRIVARE。
(tag in ["标签1", "标签2"] && create_time < "2023-01-01T00:00:00Z") || visibility == "PRIVATE"5. Filter by Date Range
This filter selects memos that were created after 2023-01-01 and before 2023-12-31.
create_time > "2023-01-01T00:00:00Z" && create_time < "2023-12-31T23:59:59Z"6. 使用逻辑非筛选内容和标签
这个过滤器选中了内容中不包含单词 日记,并且可见性是 PUBLIC 的记录。
!content.contains("日记") && visibility == "PUBLIC"7. 使用多条逻辑运算筛选
这个过滤器选中了满足如下条件的记录:
- 标签中包含
标签1或标签2。
- 并且 创建时间早于
2023-01-01。
- 并且 内容中包含
日记。
(tag in ["标签1", "标签2"] && create_time < "2023-01-01T00:00:00Z") && content.contains("日记")8. 使用带有时间的条件进行筛选
这个过滤器选中了满足如下条件的记录:
- 在
2023-01-01之后更新过。
- 或者 在
2023-01-01之前创建。
update_time > "2023-01-01T00:00:00Z" || create_time < "2023-01-01T00:00:00Z"9. 使用标签和可见性过滤(多个标签)
这个过滤器选中了标签中具有 标签1、标签2、标签3 其中之一、并且可见性设置为 PUBLIC 或 PRIVATE 的记录。
tag in ["标签1", "标签2", "标签3"] && visibility in ["PUBLIC", "PRIVATE"]过滤器语法总结
- 比较:
字段 运算符 值(例如create_time == "2023-01-01T00:00:00Z")。
- 逻辑 与:
条件1 && 条件2(例如tag in ["标签1", "标签2"] && visibility == "PUBLIC").
- 逻辑 或:
条件1 || 条件2(例如tag in ["标签1", "标签2"] || visibility == "PRIVATE")。
- 逻辑 非:
!条件(例如!content.contains("日记"))。
- 集合判断:
字段 in [值1, 值2](例如tag in ["标签1", "标签2"])。
- 字符串匹配:
字段.contains("子串")(例如content.contains("日记"))。
总结
捷径中的 filter 字段允许你定义灵活且强大的查询条件来查询你的记录。通过将查询条件、运算符、逻辑表达式组合在一起,你可以制作出精确的符合你的需求的复杂过滤器。使用 &&、|| 和 ! 等逻辑运算符来构建复合查询条件,并利用比较、集合和字符串运算符进行更细粒度的过滤。