Gremlin直接边遍历仅返回最大深度路径问题求助
解决方案
你的问题出在当前查询强制要求遍历两层边(outE().inV().outE().inV()),只有存在第二层边的路径(v1→v4→v5)能满足条件,而v1→v2、v1→v3这类只有一层边的路径会被直接过滤。要获取所有不同深度的路径,可通过union()将不同深度的遍历分支合并,具体实现如下:
最终查询语句
g.V().hasLabel('color-group').has('Color', 'primary') .union( // 获取深度为1的路径:color-group → primary-color out('links').path(), // 获取深度为2的路径:color-group → primary-color → secondary-color out('links').out('links').path() )
结果说明
执行后会返回所有符合要求的路径:
path[v[1], e[xxx][1-links->2], v[2]]path[v[1], e[xxx][1-links->3], v[3]]path[v[1], e[xxx][1-links->4], v[4]]path[v[1], e[xxx][1-links->4], v[4], e[xxx][4-links->5], v[5]]
原理解释
union()用于合并多个遍历分支的结果,每个分支对应一种路径深度;- 第一个分支
out('links').path()直接遍历一层边,获取所有从color-group到primary-color的路径; - 第二个分支
out('links').out('links').path()遍历两层边,获取从color-group经过primary-color到secondary-color的路径; - 两个分支的结果会被合并返回,覆盖所有你需要的路径类型。
内容的提问来源于stack exchange,提问作者Anil_M
相关产品推荐
相关产品推荐

