首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Gremlin (AWS海王星),如何从具有特定条件的起始节点获得长度为n的所有路径?

使用Gremlin (AWS海王星),如何从具有特定条件的起始节点获得长度为n的所有路径?
EN

Stack Overflow用户
提问于 2020-08-07 23:56:49
回答 1查看 716关注 0票数 0

从节点1开始,我希望在n跳内返回所有路径(边和顶点,具有id/label/properties),或者返回带有属性谓词的入站边(p > 50)。

理想情况下,路径不应该包含任何周期,因此路径不应该包含同一节点两次。

性质p并不存在于每个边上。

代码语言:javascript
复制
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开始,路径将类似于:

代码语言:javascript
复制
1>2
1>2>6
1>2>8
1>5

  • 1-2是包含的,因为它的出站

1-3被排除在外,因为它是入站的,并且没有p

  • 1-4,因为它是入站的,并且(p > 50)是假

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

的。

我尝试过许多不同的方法,但我似乎无法接近我想要的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-08 03:01:26

我相信这就是你要找的:

代码语言:javascript
复制
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、标签和属性。

您提供的图形的输出如下所示:

代码语言:javascript
复制
==>[[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]]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63310495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档