Gremlin:从广度优先搜索中将顶点级别作为列表发出
Gremlin: Emit vetex levels as a list from a breath first seach
我有一个图表,其中带有特定标签的边形成了一棵具有定义的起始顶点和叶顶点的树。
我想执行广度优先搜索并将树的每个级别的顶点作为单独的列表发出以供进一步处理。
到目前为止,我可以使用以下查询以正确的顺序获取顶点:
g.V()
.hasLabel("root")
.repeat(out("tree_edge").barrier().dedup())
.emit()
.until(outE("tree_edge").count().is(0))
然而,这会产生一个列表:
==>v[64]
==>v[72]
==>v[80]
==>v[88]
==>v[208]
==>v[176]
==>v[216]
==>v[184]
==>v[192]
==>v[136]
==>v[152]
==>v[104]
==>v[120]
==>v[128]
==>v[144]
==>v[96]
我想要的更像是:
==>[v[64], v[72], v[80], v[88]]
==>[v[208], v[176], v[216], v[184], v[192]]
==>[v[136], v[152], v[104], v[120], v[128], v[144], v[96]]
我不确定我需要在重复步骤中添加什么才能发出列表而不是单个顶点。我试过 cap
、project
和 fold
都无济于事。
任何指点将不胜感激。
根据顶点在树中的深度对顶点进行分组,然后对最终组图和return所有值进行排序:
g.V().hasLabel("root").
group("m").
by(constant(-1)).
repeat(out("tree_edge").dedup().group("m").by(loops())).
until(__.not(outE("tree_edge"))).
cap("m").
order(local).
by(keys).
select(values).unfold()
我有一个图表,其中带有特定标签的边形成了一棵具有定义的起始顶点和叶顶点的树。
我想执行广度优先搜索并将树的每个级别的顶点作为单独的列表发出以供进一步处理。
到目前为止,我可以使用以下查询以正确的顺序获取顶点:
g.V()
.hasLabel("root")
.repeat(out("tree_edge").barrier().dedup())
.emit()
.until(outE("tree_edge").count().is(0))
然而,这会产生一个列表:
==>v[64]
==>v[72]
==>v[80]
==>v[88]
==>v[208]
==>v[176]
==>v[216]
==>v[184]
==>v[192]
==>v[136]
==>v[152]
==>v[104]
==>v[120]
==>v[128]
==>v[144]
==>v[96]
我想要的更像是:
==>[v[64], v[72], v[80], v[88]]
==>[v[208], v[176], v[216], v[184], v[192]]
==>[v[136], v[152], v[104], v[120], v[128], v[144], v[96]]
我不确定我需要在重复步骤中添加什么才能发出列表而不是单个顶点。我试过 cap
、project
和 fold
都无济于事。
任何指点将不胜感激。
根据顶点在树中的深度对顶点进行分组,然后对最终组图和return所有值进行排序:
g.V().hasLabel("root").
group("m").
by(constant(-1)).
repeat(out("tree_edge").dedup().group("m").by(loops())).
until(__.not(outE("tree_edge"))).
cap("m").
order(local).
by(keys).
select(values).unfold()