nebula find path 能否实现这个需求

目前有这样一个需求:

  1. 关系都是Relation
  2. 找到 A 和 F 的路径,
  • 可以经过中间的D,A 和 D是指定方向的,D 和F 也是指定方向的
    A -> B -> C->【D】 <-E <-F
  • 也可以不经过中间的D, A F 有存在的直接关系
    A <-F

用Match 语句,效果特别差。

p=(c1:Node)-[:GLF*0..3]->(:Node)<-[:GLF*0..3]-(c2:Node) 

请问还有其他方式实现吗?

是找到 A 和F 之间的一条路径就好,还是要找到 A和F之间的所有路径

满足条件的所有路径

如果 允许 路径中的边可以重复 可以使用 find all path from A to F over Relation bidirect up to 5 steps yield path as p

如果不允许 路径中的边重复,可以使用 find shortest path from A to F over Relation bidirect up to 5 steps yield path as p

1 个赞

或者 你可以 find all path from A to D over relation upto 3 steps yield path as p
find all path from F to D over relation upto 2 steps yield path as p
运行着两条 然后路径自己在拼一下

bidirect 会出现这种情况吧? B 的方向指向A 这个是不需要的?
A <- B -> C->【D】 <-E <-F

问题是 不知道D 是否存在,它的vid 又是多少

试试

match p1 = (c1:Node)-[:GLF*0..3]->(b:Node)
optional match p2 = (b)<-[:GLF*0..3]-(c2:Node)
return p1, p2
1 个赞

好的

仔细想了下,是不是下面两点存在问题

  1. 如果p2 不存在的话 就不满足需求了,因为没有找到c1,c2 之间的关系
  2. 也无法找到c1 和 c2 直接的直接关系

p2 不存在的话,第二列会为 NULL ,可以直接排除掉
c1 和c2的直接关系 可以通过go语句找出来

确实,这样可以的。

浙ICP备20010487号