直接边遍历省略路径

问题描述 投票:0回答:1

我遇到了奇怪的问题。

在上图中,由于内存过载问题和顶点名称在不同级别发生变化,我无法运行 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
.

的路径

我需要所有的路径(不使用重复/直到)。

有什么想法吗?
谢谢。

gremlin tinkerpop gremlinpython
1个回答
0
投票

你没有得到所有路径的原因是因为其中只有一个满足“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]   

旁注:示例图与图表不完全匹配。这些结果对于提供的示例数据是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.