小编Alb*_*rto的帖子

在Tinkerpop 3.1中找到两个节点之间最短路径的最佳方法

我知道这次被问了几次,但我没有找到关于Tinkerpop(3.1)的最新版本的任何参考,其中包含许多我们可以在遍历中使用的新的有用函数.

假设我必须找到节点3和节点4之间最短路径.这种遍历是否有声音?

g.V(3).repeat(out()).until(id().is(4).and().simplePath()).path().limit(1)
Run Code Online (Sandbox Code Playgroud)

这里我假设当我循环执行BFS搜索时(因此,第一个结果是最短路径),因为这似乎就是loop()函数的情况.

另外,有没有办法在步骤中包含先前绑定的变量(通过使用as步骤)until?更确切地说,我试图在遍历期间选择两个节点,然后找到它们之间的最短路径,例如,

g.V().match(
__as('e0').out('Feedbacks').as('e1'),
__as('e0').repeat(out('Meets')).until(<I reach e1>).path().<get_length>.as('len')
).select('e0', 'e1', 'len')
Run Code Online (Sandbox Code Playgroud)

最后,从前面的遍历中可以看出,我不清楚如何获得最短路径的长度.使用类似的东西

g.V(3).repeat(out()).until(id().is(4).and().simplePath()).path().size()
Run Code Online (Sandbox Code Playgroud)

返回结果的大小(返回的行数),而

g.V(3).repeat(out()).until(id().is(4).and().simplePath()).path().by(__size())
Run Code Online (Sandbox Code Playgroud)

返回错误.

这是我正在试验的图表,如果有人想要玩一下.

graph = TinkerGraph.open()
e0 = graph.addVertex(T.id, 0, label, "User", "name", "e0")
e1 = graph.addVertex(T.id, 1, label, "User", "name", "e1")
e2 = graph.addVertex(T.id, 2, label, "User", "name", "e2")
e3 = graph.addVertex(T.id, 3, label, "User", "name", "e3")
e4 = graph.addVertex(T.id, 4, label, "User", "name", "e4")
e0.addEdge("Feedbacks", e2)
e0.addEdge("Meets", e1)
e2.addEdge("Feedbacks", e4)
e2.addEdge("Meets", e4) …
Run Code Online (Sandbox Code Playgroud)

shortest-path gremlin tinkerpop3

6
推荐指数
1
解决办法
4300
查看次数

tinkerpop3:使用 gremlin 计算所有节点对之间的边数

我有一个多重图,我有兴趣计算连接每对节点的边数;此外,我需要为每对节点获取某个属性的最大值。

不幸的是,在我看来,我们只能使用.group().by(...)一个属性,而我需要按inV和分组outV。在 Cypher 中,我会写一些类似的东西

MATCH (e0: Employee)-[fb: R]-> (e1: Employee)
WITH e0, e1, count(*) AS frequency, min(fb.value) AS min_val
RETURN e0, e1, frequency, min_val
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

干杯!

gremlin tinkerpop3

1
推荐指数
1
解决办法
1077
查看次数

标签 统计

gremlin ×2

tinkerpop3 ×2

shortest-path ×1