Gremlin 基于边属性对路径进行排序

Gremlin 基于边属性对路径进行排序,gremlin,tinkerpop,Gremlin,Tinkerpop,基于边缘属性和重复数据消除的遍历路径排序 你好,, 我有一个内存中的图形,我想根据边缘属性对路径进行排序,并在路径指向同一目标的位置进行重复数据消除 例如 我试图实现的是一种只给我一条路径的遍历,即 顶点=[路径[u1,u3,u4]] 我试着用下面的小精灵 List<Path> maps = g.V() .has("id", 1) .repeat(in() .sim

基于边缘属性和重复数据消除的遍历路径排序

你好,, 我有一个内存中的图形,我想根据边缘属性对路径进行排序,并在路径指向同一目标的位置进行重复数据消除

例如

我试图实现的是一种只给我一条路径的遍历,即

顶点=[路径[u1,u3,u4]]

我试着用下面的小精灵

    List<Path> maps = g.V()
                .has("id", 1)
                .repeat(in()
                        .simplePath())
                .until(inE().count().is(0))
                .order().by(outE("rel").values("order"),Order.asc)
                .path().by("name")
                .toList();
List maps=g.V()
.has(“id”,1)
.重复(在()中)
.simplePath())
。直到(inE().count()为(0))
.order().by(outE(“rel”).values(“order”)、order.asc)
.path().by(“名称”)
.toList();
然而,排序并没有发生。它给了我两条路: 顶点=[路径[u1,u2,u4],路径[u1,u3,u4]]

但我希望输出为顶点=[path[u1,u3,u4]]

我是小精灵的新手,没办法尝试了。
有人能帮忙吗

使用
toList
将提供所有可通过的遍历。在你的情况下,你确实是按顺序排列答案,但不是只选第一个

您应该添加
限制
步骤:

...
.limit(1).toList()

或者您可以使用
next()
而不是
toList()

您可以澄清排序规则吗?路径通常有多条边。您想按路径上所有
order
属性值的总和排序,还是只按最后一个
order
值排序?对于重复数据消除(),您的规则是什么?按最后一个顶点进行重复数据消除?第一个和最后一个顶点?感谢@noam621的回复。限制为1将只提供第一条路径。我想要叶节点的所有可能的不同路径。应该由其Edge属性选取,然后限制为1,这样我就可以得到基于其Edge属性具有优先级的路径。好的,您可以提供一个更复杂的示例,以获得预期的结果吗?我尝试粘贴示例图形,但stackoverflow似乎对commets文本大小有限制。但我找到了如下解决方案。g.V().has(“id”,1)。重复(in(“rel”).order().by(outE().values(“order”)、order.asc.simplePath()).inE().count().is(0)).dedup().path().by(“名称”).toList();
...
.limit(1).toList()
g.V() 
.has("id", 1) 
.repeat(in("rel") .order() .by(outE().values("order"), Order.asc) .simplePath() )
.until(inE().count().is(0)) 
.dedup() 
.path() 
.by("name") 
.toList() ;