Gremlin-同时限制遍历迭代和搜索边属性
我有一段小精灵代码,用于生成从给定顶点到具有参数test_的顶点的最短路径。如果在边上找不到该参数,则不应返回任何路径Gremlin-同时限制遍历迭代和搜索边属性,gremlin,janusgraph,gremlin-server,gremlinpython,Gremlin,Janusgraph,Gremlin Server,Gremlinpython,我有一段小精灵代码,用于生成从给定顶点到具有参数test_的顶点的最短路径。如果在边上找不到该参数,则不应返回任何路径 s.V(377524408).repeat(bothE().has('date', between(1554076800, 1556668800)).otherV()) /* date filter on edges */ .until(or(__.bothE().has('test_property', gt(0)), loops().is(4)
s.V(377524408).repeat(bothE().has('date', between(1554076800, 1556668800)).otherV()) /* date filter on edges */
.until(or(__.bothE().has('test_property', gt(0)),
loops().is(4))) /* broken logic! */
.path()
.local(unfold().filter(__.has('entity_id')).fold()) /* remove edges from output paths*/
断开的线是.untillor_uuuu.outE.具有'test_property',gt0,loops.is4
目前,它给出了距离起始顶点4跳的所有路径,这是有道理的
我试图对其进行调整,以便如果遍历在4次迭代中,并且如果没有找到属性test_属性,那么它不应该返回任何路径。如果找到test_属性,它应该只返回到该顶点的路径
我试图在中添加times4约束并删除循环条件,但不知道如何同时使用times4 this和.has'test_property',gt0约束 这应该有效:
s.V(377524408).
repeat(bothE().has('date', between(1554076800, 1556668800)).otherV().as('v')).
times(4).
filter(bothE().has('test_property', gt(0))).
select(all, 'v')
另外请注意,我替换了localunfold.filter\uuuu.has'entity\u id'。使用更简单的方法折叠,假设唯一的目的是从路径中删除边。这应该可以:
s.V(377524408).
repeat(bothE().has('date', between(1554076800, 1556668800)).otherV().as('v')).
times(4).
filter(bothE().has('test_property', gt(0))).
select(all, 'v')
还要注意的是,我替换了localunfold.filter\uuuu.has'entity\u id'。使用更简单的方法折叠,假设唯一的目的是从路径中删除边。Daniel的回答没有什么问题,请参见注释。 此查询返回正确的结果:
g.V(377524408)
.repeat(bothE().has('date', between(1554076800, 1556668800)).otherV().simplePath().as("v"))
.until(and(bothE().has('tp', gt(0)), loops().is(lte(4))))
.select(all, "v")
.limit(1)
simplePath是必需的,因此我们不会来回走动,避免出现圆圈
重复循环直到满足条件并且我们没有达到最大跳数
limit1只返回第一条最短路径。忽略获取所有路径
请注意,如果图形是有方向的,则最好使用outE,而不是两者都使用。丹尼尔的回答几乎没有问题,请参见注释。 此查询返回正确的结果:
g.V(377524408)
.repeat(bothE().has('date', between(1554076800, 1556668800)).otherV().simplePath().as("v"))
.until(and(bothE().has('tp', gt(0)), loops().is(lte(4))))
.select(all, "v")
.limit(1)
simplePath是必需的,因此我们不会来回走动,避免出现圆圈
重复循环直到满足条件并且我们没有达到最大跳数
limit1只返回第一条最短路径。忽略获取所有路径
请注意,如果图形是定向的,则最好使用outE,而不是两者都使用。您只要求test_属性位于与最终顶点相关的任何外边缘上?不是在每一条经过的边上?正确。我想得到test_属性的最短路径,它可能存在于任何边上,也可能不存在于任何边上,但前提是test_属性存在于x=4次迭代中,否则不要返回任何路径,因为不存在。您只要求test_属性位于与最终顶点相关的任何外边上?不是在每一条经过的边上?正确。我想获得测试_属性的最短路径,该路径可能存在于任何边上,也可能不存在于任何边上,但前提是测试_属性在x=4次迭代中存在,否则不要返回任何路径,因为不存在任何路径。谢谢Daniel,当我有机会测试该路径并返回给您。答案不正确。它会来回弹跳,只返回长度为4的路径。感谢大牛,当我有机会测试这个,然后再回复你。这个答案是不正确的。它将来回反弹,只返回长度为4的路径。