基础模板可以对路径中的最小单位(点、边)进行描述与过滤,多个基础模板组装成路径、子图后能精准的匹配应用场景中的查询需求。
描述点、边的基础模板有以下 4 类:
基础模板 | 模板类型 | 描述 |
参数别名结构 |
---|---|---|---|
n() |
单点 | 某一个点的过滤条件: |
NODE |
e() , e()[1] , le() , le()[1] , re() , re()[1] |
单边 | 某一条边的过滤条件;边方向分别为忽略、向左或向右(以下同): |
EDGE |
e()[<>] , le()[<>] , re()[<>] |
多边 | 多个连续边的过滤条件: 其中 [<>] 的格式如下(N ≥ 2):[N] : N 条边 [:N] : 1~N 条边 [0:N] : 0~N 条边(见下注释) [M:N] : M~N 条边 [*:N] : 1~N 条边的最短路径 |
不支持 |
e().nf()[<>] , le().nf()[<>] , re().nf()[<>] |
多边(含中介点) | 多个连续边、中介点的过滤条件: 其中 [<>] 的格式同上 |
不支持 |
注:多边模板长度设置为 [0:N] 时,当且仅当该多边模板左、右两侧的单点模板具有相同的过滤条件时,才会触发 0 步的情况,此时相当于舍弃该多边模板,并将其左、右两侧的单点模板视为同一个点。
组装原则
- 原则 1:按照以点开始、以点结尾、点边交替出现的规则组装路径
例如,下图所示的 3 步路径中,点、边的过滤条件各不相同,该路径可表达为 n().re().n().re().n().re().n(),每个点、边模板中均可设置独立的过滤条件、参数别名:
n({@mgr}).re({@manage}).n({@cst} as n1)
.re({@has}).n({@acct} as n2)
.re({@buy} as e1).n({@product}) as p
- 原则 2:使用多边模板对路径中具有相同过滤条件的连续边、中介点进行合并
例如,下图所示的 5 步路径中,中间 3 步的边、中介点的过滤条件相同,此部分路径可使用多边模板 re().nf()[3],需注意多边模板内的点、边不可自定义别名:
n({@cst}).re({@has}).n({@acct} as n1)
.re({@transfer}).nf({@acct})[3].n({@acct} as n2)
.le({@has}).n({@cst}) as p
- 原则 3:使用步数范围灵活把控路径的长度
例如,下图所示的路径中,中间账户转账的步数限定为 1~3 步时,此部分路径可使用多边模板 re().nf()[:3]:
n({@cst} as n1).re({@has}).n({@acct} as c1)
.re({@transfer})[:3].n({@acct} c1)
.le({@has}).n({@cst}) as p