过滤器可以判断一个点、边的 schema、属性值是否满足条件。过滤器具有以下特征:
- 是一个用花括号
{ }
包裹起来的表达式,值为 bool、null - 通常(但非必须)调用当前点、边的 schema 或属性值
- 只返回判断结果为 true 的点、边
当过滤器的表达式非 bool 且非 null时,按照以下原则转为 bool:
类型 | 何时转为 true | 何时转为 false |
---|---|---|
int32,uint32,int64,uint64,float,double | 非 0 时 | 0 时 |
string,text | 首个字符非 0 时 | 首个字符为 0 时 |
datetime | 不为 "0000-00-00 00:00:00" 时 | 为 "0000-00-00 00:00:00" 时 |
timestamp | 不为 "1970-01-01 08:00:00 +08:00" 时 | 为 "1970-01-01 08:00:00 +08:00" 时 |
point | 从不 | 任意值 |
list | 从不 | 任意值 |
场景一:一般过滤
在任意查询中,使用常量、之前语句中定义的别名对当前点、边进行过滤。例如:
find().edges({time >= "2021-09-01 09:00:00"})
...
... as maxAge
find().nodes({age == maxAge})
...
此场景所过滤的属性,即以上代码中的边属性 time、点属性 age,无需任何加速处理即可直接用于查询。
场景二:步间过滤
在模板查询中,使用 prev_n
、prev_e
、当前语句内较早定义的别名对当前点、边进行过滤。例如:
n(as start).e()[3].n({level == start.level})
...
n().e({@transfer.time > prev_e.time})[3].n()
...
此场景所过滤的属性,即以上代码中的点属性 level、@transfer 边属性 time,必须 LTE 后才能用于查询。
路径查询时的参数
path_ascend()
、path_descend()
实现的步间比较的效果类似于步间过滤,也要求被判别的属性 LTE 后才能进行查询,但这两个参数中的内容不是以过滤器的形式出现的。
场景三:全文过滤
在任意查询中,使用关键词常量对当前点、边的某个属性的全文索引进行过滤。例如:
find().nodes({~content CONTAINS "graph computing parallel"})
...
此场景所过滤的全文索引,即以上代码中的 content,必须事先通过 create().node_fulltext()
命令进行创建后才能用于查询。