语句 khop().src().depth()
可以查询一个起点经过 K 步最短路径后所到达的终点,即该起点的 KHop 邻居点,可以对最短路径的深度、邻居点(非起点)、边进行过滤,并返回满足条件的点。
K 邻是图论中的基本概念,如果点 A 是点 B 的 KHop 邻居点,那么这个 K 值是唯一的。Ultipa 使用 BFS(广度优先)的方式查找最短路径。
K 邻查询是进行过改良、大幅提高性能后的图近邻查询功能,建议在进行邻居节点查询时,使用 KHop 来替换其他的路径搜索方式。
语法:
- 语句别名:支持,结构为 NODE
- 全部参数:
参数 | 类型 | 规范 | 描述 | 参数别名结构 |
---|---|---|---|---|
src() |
filter | / | 路径起点的过滤条件;多个点满足条件时会报错 | NODE |
depth() |
range | >0 | 设置路径的深度 depth(N) : 第 N 步 depth(:N) : 第 1~N 步 depth(M:N) : 第 M~N 步 |
不支持 |
node_filter() |
filter | / | 邻居点(非 src )的过滤条件 |
不支持 |
edge_filter() |
filter | / | 所有边的过滤条件 | 不支持 |
direction() |
string | left, right | 规定边的方向 | 不支持 |
limit() |
int | -1 或 >=0 | K 邻查询单次执行时返回结果的条数,-1 表示返回所有结果 | 不支持 |
N 步查询
示例:查找银行卡 CA001 的 3Hop 邻居,返回 10 条结果并携带全部信息
khop().src({_id == "CA001"}).depth(3) as n
limit 10
return n{*}
1~N 步查询
示例:查找银行卡 CA001 的 3Hop 以内的邻居,返回 10 条结果并携带全部信息
khop().src({_id == "CA001"}).depth(:3) as n
limit 10
return n{*}
M~N 步查询
示例:查找银行卡 CA001 的 2~3Hop 邻居,返回 10 条结果并携带全部信息
khop().src({_id == "CA001"}).depth(2:3) as n
limit 10
return n{*}
邻居点过滤查询
示例:查找银行卡 CA001 的 3Hop 以内的邻居,要求邻居点不是银行卡,返回 10 条结果并携带全部信息
khop().src({_id == "CA001"}).depth(:3)
.node_filter({!@card}) as n
limit 10
return n{*}
边过滤查询
示例:查找银行卡 CA001 的 3Hop 以内的邻居,要求边不是转账边,返回 10 条结果并携带全部信息
khop().src({_id == "CA001"}).depth(:3)
.edge_filter({!@transfer}) as n
limit 10
return n{*}
右向边查询
示例:查找银行卡 CA001 的 3Hop 以内的邻居,要求边均为右向边,返回 10 条结果并携带全部信息
khop().src({_id == "CA001"}).depth(:3)
.direction(right) as n
limit 10
return n{*}
左向边查询
示例:查找银行卡 CA001 的 3Hop 以内的邻居,要求边均为左向边,返回 10 条结果并携带全部信息
khop().src({_id == "CA001"}).depth(:3)
.direction(left) as n
limit 10
return n{*}
单次查询数量限制
示例:查找银行卡 CA001、CA002 的 3Hop 邻居,各返回 3 个邻居,携带全部信息
uncollect ["CA001","CA002"] as n1
khop().src({_id == n1}).depth(3)
.limit(3) as n2
return n2{*}