表达式
表达式是指由 操作符 和 操作数 按照语法要求组成的运算式,每个表达式都有一个 值。
-
表达式的操作符:条件判断符、逻辑运算符、数值运算符(操作符列表及运算优先级见下一节内容)
-
表达式的操作数:常量、别名、函数值、当前schema、当前属性值
操作数 | 操作数举例 | 表达式举例 |
---|---|---|
常量 | 1,"abc", "2020-01-01 0:0:0" | 1+3*2 |
别名 | nodes,edges,paths | nodes.level,edges.amount < 2000 |
函数值 | now(),count(nodes),year("2022-04-12") | year(edges.time) > 2020 |
当前 schema | this.@ | @ == "card",@product |
当前属性值 | this._id,this.name | level != 2 |
(上表中 nodes、edges、paths 分别为点、边、路径的别名;当前点、边的别名 this 通常可以省略)
- 表达式的值:NODE,EDGE,PATH,ATTR(数字、时间、字符串、真假),ARRAY,TABLE
过滤器
Ultipa 的过滤器是一个用花括号 { }
包裹起来的表达式,其操作数中含有当前点、边的 schema 或属性值,表达式的值为真或假,表示当前点、边是否满足要求。Ultipa 的所有查询操作均使用过滤器对点、边进行筛选。
- 过滤器的数值与真假的转换:
转换前 | 转换后 |
---|---|
非 0 | 真 |
0 | 假 |
真 | 1 |
假 | 0 |
将string、datetime 转换为真假时,若其第一个字符为 0 则为假,否则为真;将 timestamp 转换为真假时,若其值为 "1970-01-01 08:00:00" 则为假,否则为真。
- 过滤器的应用:
应用 | 说明 | 举例 |
---|---|---|
常规过滤 | 在任意查询中,对当前点、边进行一般过滤 | {time > "2022-02-24 07:00:00"} |
步间过滤 | 在模板查询中,通过系统别名 prev_n 、prev_e 将当前点、边与其路径中的前一个点、边一起进行过滤 |
{time > prev_e.time} |
全文过滤 | 在任意查询中,通过建立全文索引对当前点、边的某个属性的分词结果进行全文过滤 | {~content contains "graph ultra* database"} |
(上表中 time为属性名,content 为某属性的全文索引)