我在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的单个顶点 - 这将是我们将用于发现您正在寻找的“辐射路径”的顶点:
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]]
1 回答
dynamodb-titan基于TinkerPop 3.x和TinkerPop 3.x Gremlin不受Groovy的约束 . Groovy中的Gremlin基本上等同于Java . 如果你不学习Gremlin,你将无法与Titan(或TinkerPop)相处,因为它是查询图表的唯一方法 .
获取遍历路径需要使用path()步骤 . 为了演示我将使用Gremlin控制台,并且在使用Groovy进行评估时,我可以向您保证,您可以将此代码复制并粘贴到Java项目中,并且它可以在那里工作得很好 .
首先,我创建了我将演示的玩具图:
接下来,我编写一个遍历,找到id为1的单个顶点 - 这将是我们将用于发现您正在寻找的“辐射路径”的顶点:
然后我们遍历边缘到1的相邻顶点:
然后我们再做一次:
现在,如果我们想要看到遍历者到达那里的路径,我们就这样做:
并且存在从单个顶点辐射的所有顶点,它们与1完全相差两步 .
如果你不知道从起始顶点走开的长度,那么你可以使用repeat():