语句 autonet().src().dest().depth()
可以查询一组起点和一组终点之间的路径,由于是将起点、终点配对后进行 AB 路径查询,故可以理解为 ab()
命令的批处理模式,且其参数 limit()
所限制的是每次 AB 路径查询的返回结果的条数,而非总的结果条数。
通过调整参数 dest()
的使用,组网查询可实现两种不同的组网模式:
- 互组网:N 个起点和 M 个终点组网,需进行 N * M 次 AB 路径查询
- 自组网:N 个点两两组网,需进行 N(N-1)/2 次 AB 路径查询
语法:
- 语句别名:支持,结构为 PATH
- 全部参数:
参数 | 类型 | 规范 | 描述 | 参数别名结构 |
---|---|---|---|---|
src() |
filter | / | 路径起点的过滤条件 | NODE |
dest() |
filter | / | 路径终点的过滤条件,此时为互组网查询;不使用本参数时为自组网查询 | NODE |
depth() |
range | >0 | 设置路径的深度 depth(N) : N 步 depth(:N) : 1~N 步 depth(M:N) : M~N 步 depth(N).shortest() : N 步内的最短路径 |
不支持 |
shortest() |
/ | / | 查询 N 步内最短路径,此时 depth() 参数需填写固定值 |
不支持 |
node_filter() |
filter | / | 中介点(非 src 、非 dest )的过滤条件 |
不支持 |
edge_filter() |
filter | / | 所有边的过滤条件 | 不支持 |
direction() |
string | left, right | 规定边的方向 | 不支持 |
no_circle() |
/ | / | 不返回含有环路成分的路径,环路成分的定义可参见《背景知识》中的术语介绍 | 不支持 |
limit() |
int | -1 或 >=0 | 每组起点、终点的路径查询(AB 路径查询)返回结果的条数,-1 表示返回所有结果 | 不支持 |
互组网 N 步查询
示例:以银行卡 CA001、CA002、CA003 为起点,以顾客 CU001、CU002 为终点,互组网查找 5 步路径,每组返回 2 条路径
autonet()
.src({_id in ["CA001","CA002","CA003"]}).dest({_id in ["CU001","CU002"]}).depth(5)
.limit(2) as p
return p{*}
互组网 1~N 步查询
示例:以银行卡 CA001、CA002、CA003 为起点,以顾客 CU001、CU002 为终点,互组网查找 5 步以内的路径,每组返回 2 条路径
autonet()
.src({_id in ["CA001","CA002","CA003"]}).dest({_id in ["CU001","CU002"]}).depth(:5)
.limit(2) as p
return p{*}
互组网 M~N 步查询
示例:以银行卡 CA001、CA002、CA003 为起点,以顾客 CU001、CU002 为终点,互组网查找 3~5 步路径,每组返回 2 条路径
autonet()
.src({_id in ["CA001","CA002","CA003"]}).dest({_id in ["CU001","CU002"]}).depth(3:5)
.limit(2) as p
return p{*}
互组网无权重最短路径查询
示例:以银行卡 CA001、CA002、CA003 为起点,以顾客 CU001、CU002 为终点,互组网查找 5 步以内的最短路径,每组返回 2 条路径
autonet()
.src({_id in ["CA001","CA002","CA003"]}).dest({_id in ["CU001","CU002"]}).depth(5)
.shortest().limit(2) as p
return p{*}
互组网中介点过滤查询
示例:以银行卡 CA001、CA002、CA003 为起点,以顾客 CU001、CU002 为终点,互组网查找 5 步以内的路径,要求中介点不是银行卡,每组返回 2 条路径
autonet()
.src({_id in ["CA001","CA002","CA003"]}).dest({_id in ["CU001","CU002"]}).depth(:5)
.node_filter({!@card}).limit(2) as p
return p{*}
互组网边过滤查询
示例:以银行卡 CA001、CA002、CA003 为起点,以顾客 CU001、CU002 为终点,互组网查找 5 步以内的路径,要求边不是转账边,每组返回 2 条路径
autonet()
.src({_id in ["CA001","CA002","CA003"]}).dest({_id in ["CU001","CU002"]}).depth(:5)
.edge_filter({!@transfer}).limit(2) as p
return p{*}
互组网右向边查询
示例:以银行卡 CA001、CA002、CA003 为起点,以银行卡 CA022、CA029 为终点,互组网查找 5 步以内的路径,要求边均为右向边,每组返回 2 条路径
autonet()
.src({_id in ["CA001","CA002","CA003"]}).dest({_id in ["CA022","CA029"]}).depth(:5)
.direction(right).limit(2) as p
return p
互组网左向边查询
示例:以银行卡 CA001、CA002、CA003 为起点,以银行卡 CA022、CA029 为终点,互组网查找 5 步以内的路径,要求边均为左向边,每组返回 2 条路径
autonet()
.src({_id in ["CA001","CA002","CA003"]}).dest({_id in ["CA022","CA029"]}).depth(:5)
.direction(left).limit(2) as p
return p
互组网去除环路查询
示例:以银行卡 CA001、CA002、CA003 为起点,以银行卡 CA022、CA029 为终点,互组网查找 5 步以内的路径,去除环路,每组返回 2 条路径
autonet()
.src({_id in ["CA001","CA002","CA003"]}).dest({_id in ["CA022","CA029"]}).depth(:5)
.no_circle().limit(2) as p
return p
互组网总查询数量限制
示例:以银行卡 CA001、CA002、CA003 为起点,以顾客 CU001、CU002 为终点,互组网查找 5 步路径,返回 10 条路径
autonet()
.src({_id in ["CA001","CA002","CA003"]}).dest({_id in ["CU001","CU002"]}).depth(5) as p
limit 10
return p{*}
自组网 N 步查询
示例:以银行卡 CA001、CA002、CA003 为起点、终点,自组网查找 5 步路径,每组返回 2 条路径
autonet()
.src({_id in ["CA001","CA002","CA003"]}).depth(5)
.limit(2) as p
return p{*}
自组网 1~N 步查询
示例:以银行卡 CA001、CA002、CA003 为起点、终点,自组网查找 5 步以内的路径,每组返回 2 条路径
autonet()
.src({_id in ["CA001","CA002","CA003"]}).depth(:5)
.limit(2) as p
return p{*}
自组网 M~N 步查询
示例:以银行卡 CA001、CA002、CA003 为起点、终点,自组网查找 3~5 步路径,每组返回 2 条路径
autonet()
.src({_id in ["CA001","CA002","CA003"]}).depth(3:5)
.limit(2) as p
return p{*}
自组网无权重最短路径查询
示例:以银行卡 CA001、CA002、CA003 为起点、终点,自组网查找 5 步以内的最短路径,每组返回 2 条路径
autonet()
.src({_id in ["CA001","CA002","CA003"]}).depth(5)
.shortest().limit(2) as p
return p{*}
自组网中介点过滤查询
示例:以银行卡 CA001、CA002、CA003 为起点、终点,自组网查找 5 步以内的路径,要求中介点不是银行卡,每组返回 2 条路径
autonet()
.src({_id in ["CA001","CA002","CA003"]}).depth(:5)
.node_filter({!@card}).limit(2) as p
return p{*}
自组网边过滤查询
示例:以银行卡 CA001、CA002、CA003 为起点、终点,自组网查找 5 步以内的路径,要求边不是转账边,每组返回 2 条路径
autonet()
.src({_id in ["CA001","CA002","CA003"]}).depth(:5)
.edge_filter({!@transfer}).limit(2) as p
return p{*}
自组网右向边查询
示例:以银行卡 CA001、CA002、CA003 为起点、终点,自组网查找 5 步以内的路径,要求边均为右向边,每组返回 2 条路径
autonet()
.src({_id in ["CA001","CA002","CA003"]}).depth(:5)
.direction(right).limit(2) as p
return p
自组网左向边查询
示例:以银行卡 CA001、CA002、CA003 为起点、终点,自组网查找 5 步以内的路径,要求边均为左向边,每组返回 2 条路径
autonet()
.src({_id in ["CA001","CA002","CA003"]}).depth(:5)
.direction(left).limit(2) as p
return p
自组网去除环路查询
示例:以银行卡 CA001、CA002、CA003 为起点、终点,自组网查找 5 步以内的路径,去除环路,每组返回 2 条路径
autonet()
.src({_id in ["CA001","CA002","CA003"]}).depth(:5)
.no_circle().limit(2) as p
return p
自组网总查询数量限制
示例:以银行卡 CA001、CA002、CA003 为起点、终点,自组网查找 5 步路径,返回 10 条路径
autonet()
.src({_id in ["CA001","CA002","CA003"]}).depth(5) as p
limit 10
return p{*}