Amazon dynamodb 在Java中,如何获得从顶点辐射出去的所有路径(顶点)?

Amazon dynamodb 在Java中,如何获得从顶点辐射出去的所有路径(顶点)?,amazon-dynamodb,graph-databases,titan,Amazon Dynamodb,Graph Databases,Titan,我在DynamoDB上使用Titan。我有一个没有圈的有向边图。给定一个顶点,我需要所有从该顶点辐射出去的路径。“路径”仅表示每个路径上辐射出给定顶点的顶点列表 我只是不能理解Gremlin和Groovy,所以我希望Java中存在一个解决方案 或者有一个我可以转换成Java的Gremlin查询吗?dynamodb titan基于TinkerPop 3.x,在TinkerPop 3.x中Gremlin不绑定到Groovy。Groovy中的Gremlin基本上等同于Java。如果你不学习Gremli

我在DynamoDB上使用Titan。我有一个没有圈的有向边图。给定一个顶点,我需要所有从该顶点辐射出去的路径。“路径”仅表示每个路径上辐射出给定顶点的顶点列表

我只是不能理解Gremlin和Groovy,所以我希望Java中存在一个解决方案


或者有一个我可以转换成Java的Gremlin查询吗?

dynamodb titan基于TinkerPop 3.x,在TinkerPop 3.x中Gremlin不绑定到Groovy。Groovy中的Gremlin基本上等同于Java。如果你不学习Gremlin,你将无法使用Titan(或TinkerPop),因为它是查询图表的唯一方法

获取遍历路径需要使用步骤。为了演示,我将使用Gremlin控制台,虽然它是用Groovy进行评估的,但我可以向您保证,您可以将此代码复制并粘贴到Java项目中,并且在那里也同样有效

首先,我创建我将演示的玩具图:

gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
接下来,我写一个遍历,找到一个id为1的顶点-这将是我们用来发现您正在寻找的“辐射路径”的顶点:

gremlin> g.V(1)
==>v[1]
然后,我们从1向外遍历边到相邻顶点:

gremlin> g.V(1).out()
==>v[3]
==>v[2]
==>v[4]
然后我们再做一次:

gremlin> g.V(1).out().out()
==>v[5]
==>v[3]
现在,如果我们想看到遍历者到达那里的路径,我们只需执行以下操作:

gremlin> g.V(1).out().out().path()
==>[v[1],v[4],v[5]]
==>[v[1],v[4],v[3]]
所有的顶点都是从一个顶点辐射出来的,离1有整整两步的距离

如果不知道从起始顶点开始的走行长度,则可以使用:


谢谢stephen mallete,这就是我要找的。然而,似乎有一个问题。.out()将被重复,直到它覆盖所有可能连接的边为止?我如何知道何时停止链接.out()?我希望我能给你一个赏金。更新了我的答案…同样,这应该直接翻译成java。请注意,您需要使用
\uuuu
类才能在那里工作(控制台会自动为您执行),这就是为什么我的代码不必显式执行。感谢stephen mallette,这正是我想要的。我的示例中的代码将在java中工作。什么方面在java中不适合您(除了转换为
GraphTraversal
和泛型之外,泛型与查询本身并不相关)?提供
\uu out()
repeat()
正是您所需要的
repeat()
和许多其他步骤将匿名
遍历
作为参数,使用
\uuu
就是生成该参数的类。您在我的代码中看不到
\uuu
,因为groovy控制台静态地导入了该类。
gremlin> g.V(1).repeat(out()).until(outE().count().is(0)).path()
==>[v[1],v[3]]
==>[v[1],v[2]]
==>[v[1],v[4],v[5]]
==>[v[1],v[4],v[3]]