从节点1开始,我希望在n跳内返回所有路径(边和顶点,具有id/label/properties),或者返回带有属性谓词的入站边(p > 50)。
理想情况下,路径不应该包含任何周期,因此路径不应该包含同一节点两次。
性质p并不存在于每个边上。
g.addV().property(id, 1).as('1').
addV().property(id, 2).as('2').
addV().property(id, 3).as('3').
addV().property(id, 4).as('4').
addV().property(id, 5).as('5').
addV().property(id, 6).as('6').
addV().property(id, 7).as('7').
addV().property(id, 8).as('8').
addE('pointsAt').from('1').to('2').
addE('pointsAt').from('3').to('1').
addE('pointsAt').from('4').to('1').property('p', 10).
addE('pointsAt').from('5').to('1').property('p', 100).
addE('pointsAt').from('2').to('6').
addE('pointsAt').from('7').to('2').
addE('pointsAt').from('8').to('2').property('p', 100).
iterate()假设我们从顶点1开始,路径将类似于:
1>2
1>2>6
1>2>8
1>51-3被排除在外,因为它是入站的,并且没有p
H 1111-5是E 112包含的E 213因为它是入站的,而(p > 50)是真实的<H 214H 1152-6是E 116包含的E<217/code>,因为它的<出站代码>H 218H 1192-7被排除,因为它被排除在<2。code>
2-8是包含的,因为它是入站到2且p> 50的。
我尝试过许多不同的方法,但我似乎无法接近我想要的东西。
发布于 2020-08-08 03:01:26
我相信这就是你要找的:
g.V(1).
repeat(
union(
outE(),inE().has('p',gt(50))
).
otherV().simplePath()).
emit().
times(2).
path().
by(valueMap().with(WithOptions.tokens))repeat()和times()步骤规定这是深度为2的递归遍历。union()步骤和包含参数遵循您的要求,包括所有传出边,并且只包含具有大于50的p属性的传入边。emit()步骤强制repeat()步骤在找到所有路径时对它们进行流。如果不包括此内容,则只能找到长度为2的路径(在time()步骤中声明)。
为了结束这个过程,我们使用path()和by()输出路径以及路径中每个顶点和边缘的所有in、标签和属性。
您提供的图形的输出如下所示:
==>[[id:1,label:vertex],[id:0,label:pointsAt],[id:2,label:vertex]]
==>[[id:1,label:vertex],[id:3,label:pointsAt,p:100],[id:5,label:vertex]]
==>[[id:1,label:vertex],[id:0,label:pointsAt],[id:2,label:vertex],[id:4,label:pointsAt],[id:6,label:vertex]]
==>[[id:1,label:vertex],[id:0,label:pointsAt],[id:2,label:vertex],[id:6,label:pointsAt,p:100],[id:8,label:vertex]]https://stackoverflow.com/questions/63310495
复制相似问题