我遇到了奇怪的问题。
在上图中,由于内存过载问题和顶点名称在不同级别发生变化,我无法运行 repeat/until。我正在尝试通过每个步骤进行直接边遍历。
但是,我看到查询只显示具有最大遍历深度的路径。
图表:
g.addV(‘color-group’).property(id,1).property(single, ‘Color’, ‘primary’).next()
g.addV(‘primary-color’).property(id,2).property(single, ‘Color’, ‘red’).next()
g.addV(‘primary-color’).property(id,3).property(single, ‘Color’, ‘blue’).next()
g.addV(‘primary-color’).property(id,4).property(single, ‘Color’, ‘yellow’).next()
g.addV(‘secondary-color’).property(id,5).property(single, ‘Color’, ‘red-10’).next()
g.V(1).addE('links').to(g.V(2)).next()
g.V(1).addE('links').to(g.V(3)).next()
g.V(1).addE('links').to(g.V(4)).next()
g.V(4).addE('links').to(g.V(5)).next()
查询:
>>> g.V().hasLabel('color-group').has('Color', 'primary').as_('color_group').outE().inV().outE().inV().path().next()
结果:
path[v[1], e[40][1-links->4], v[4], e[41][4-links->5], v[5]]
所以在它从
primary -> blue
和 primary -> yellow
的跳过路径之上并且只显示来自 primary -> red -> red-10
. 的路径
我需要所有的路径(不使用重复/直到)。
有什么想法吗?
谢谢。
你没有得到所有路径的原因是因为其中只有一个满足“2-hop”要求。对于这种特定情况,您可以使用
optional
,但对于未知深度的路径,这可能会变得复杂。
在 Gremlin 控制台中使用此版本的数据(修改后加载到 Gremlin 的 3.6.2 级别并固定引号)...
g.addV('color-group').property(id,1).property(single, 'Color', 'primary')
g.addV('primary-color').property(id,2).property(single, 'Color', 'red')
g.addV('primary-color').property(id,3).property(single, 'Color', 'blue')
g.addV('primary-color').property(id,4).property(single, 'Color', 'yellow')
g.addV('secondary-color').property(id,5).property(single, 'Color', 'red-10')
g.V(1).addE('links').to(V(2))
g.V(1).addE('links').to(V(3))
g.V(1).addE('links').to(V(4))
g.V(4).addE('links').to(V(5))
查询可以重写为:
g.V().hasLabel('color-group').has('Color', 'primary').as_('color_group').
outE().inV().
optional(outE().inV()).
path()
运行时:
gremlin> g.V().hasLabel('color-group').has('Color', 'primary').
......1> outE().inV().
......2> optional(outE().inV()).
......3> path()
==>[v[1],e[12][1-links->2],v[2]]
==>[v[1],e[13][1-links->3],v[3]]
==>[v[1],e[14][1-links->4],v[4],e[15][4-links->5],v[5]]
具有节点和边的属性和标签:
gremlin> g.V().hasLabel('color-group').has('Color', 'primary').
......1> outE().inV().
......2> optional(outE().inV()).
......3> path().
......4> by('Color').
......5> by(label)
==>[primary,links,red]
==>[primary,links,blue]
==>[primary,links,yellow,links,red-10]
旁注:示例图与图表不完全匹配。这些结果对于提供的示例数据是正确的。