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 字段允许你定义灵活且强大的查询条件来查询你的记录。通过将查询条件、运算符、逻辑表达式组合在一起,你可以制作出精确的符合你的需求的复杂过滤器。使用 &&
、||
和 !
等逻辑运算符来构建复合查询条件,并利用比较、集合和字符串运算符进行更细粒度的过滤。