我知道这被问过好几次了,但我没有找到任何关于 Tinkerpop 最新版本(3.1)的参考资料,它具有许多我们可以在遍历中使用的新有用功能。
假设我必须找到节点 3 和 4 之间的最短路径。这是遍历声音吗?
g.V(3).repeat(out()).until(id().is(4).and().simplePath()).path().limit(1)
在这里,我假设当我循环执行 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')
最后,从前面的遍历中可以看出,我不清楚如何获得最短路径的长度。使用类似的东西
g.V(3).repeat(out()).until(id().is(4).and().simplePath()).path().size()
返回结果的大小(返回的行数),而
g.V(3).repeat(out()).until(id().is(4).and().simplePath()).path().by(__size())
返回错误。
这是我正在试验的图表,如果有人想玩一下。
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)
e3.addEdge("Feedbacks", e0)
e3.addEdge("Meets", e2)
e4.addEdge("Feedbacks", e0)
g = graph.traversal()