如何获取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]]
我在 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]]