如何获取Java中从顶点辐射出的所有路径(顶点)?

How to get all paths(vertexes) radiating out of a vertex in Java?

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

我只是无法理解 Gremlin 和 Groovy,所以我希望 Java 中有解决方案。

或者是否有我可以转换为 Java 的 Gremlin 查询?

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

获取遍历路径需要使用path()步骤。为了演示,我将使用 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 的单个顶点 - 这将是我们将用来发现您正在寻找的 "radiation path" 的顶点:

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 整整两步。

如果您不知道从起始顶点步行的长度,那么您可以使用 repeat():

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]]