时序图,edge带rank时间属性的路径查询方法

想使用Nebula V3之后对时序图的支持,就是edge的可以附带一个时间属性的rank的功能,文档里对这个rank的使用方法和描述都不多,只发现包括where里边可以按rank过滤边的一些简单功能描述。

我想询问的是,如何使用rank来查询一个按时间排序的path?

场景:
比如一个图里有ABCD 4个person的点,eage type就一种是meet,
现在有如下4个边的关系
A–meet@10:00–>B、B–meet@11:00–>D
A–meet@12:00–>C、C–meet@10:00–>D

如果不看时间属性,那么A到D的的路径有两条ABD和ACD;
但是如果加上时间先后的逻辑判断,即有向边的后一条边的发生时间必须在前一条边之后。由于C–>D发生在A–>C之前,所以符合逻辑的路径只有ABD。

现在就想问如何利用rank把这样的路径给查询出来,我觉得这个应该是时序图上普遍存在的需求,望解答。

1 个赞

如果没有办法确认其中的任何一个点的VID,全表扫性能不行
match (a)-[e]->(b)-[e2]->(d) where rank(e) < rank(e2)

2 个赞

哦哦哦,可以这样提取rank值在where中比较啊,我试试,多谢

顺便多问一句,如果可以这样在where中比较rank的话,那和给edge附一个时间property,然后在where里比这个时间property有什么不一样呢?
为什么在加入edge的rank之前nebula说不支持时序图,这两种做法有何不同呢?

先说问题2,edge的rank是一直都有的并非3.0才加入,nebula本身并不支持时序图,但可以通过edge的rank,特别是vertex上的自环的rank来实现部分时序图的功能。
问题1,要仔细看下rank的定义,nebula的边由(src vertex, edge type, dst vertex, rank)来构成,property就做不到这一点了,另外存储上rank是在边的key里,property在value,性能上rank应该会好些吧。

OK,nebula新人,没有用过2.x版本,但从上边文档里读的字面意思以为rank是后来加的为了支持时序图的,我的理解问题。

因为当时我也没想到可以这样搞啊,所以那个时候我写文档的时候就说不支持。