0

我坚持使用 gremlin 查询来rank根据作为参数传递给查询的排序键列表为节点分配值。由“uniqueId”值标识的每个节点都应根据重新排列的数组中的出现顺序分配一个等级。

这有效:

reranked = [uniqueId1, uniqueId2, uniqueId3]
v.outE.as('e').inV.filter{it.key == reranked[2]}.back('e').sideEffect{it.rank = 2}

但这不是(用 for 循环变量替换 int ):

reranked = [uniqueId1, uniqueId2, uniqueId3]
for (i in 1..reranked.size())
v.outE.as('e').inV.filter{it.key == reranked[i]}.back('e').sideEffect{it.rank = i}

你知道为什么这不起作用吗?我也很高兴能用更简单的想法来达到同样的目标。

4

2 回答 2

0

好吧,看起来我找到了一个解决方案,也许很笨拙,但是嘿,它有效!

c=0
v.as('st').outE.as('e').inV.filter{it.key == reranked[c]}.back('e').sideEffect{
    it.rank = reranked.size() - c }.outV.loop('st'){ c++ < so.size() }

如果对上述情况有解决办法,我仍然会接受另一个答案,也许是一种更优雅的解决方案。

于 2013-01-28T22:56:40.080 回答
0

您可以使用 Groovy 来执行此操作,eachWithIndex例如:

reranked = [uniqueId1, uinqueId2, uniqueId3]
reranked.eachWithIndex{uniqueId, idx -> v.outE.as('e').inV.has('key', uniqueId).back('e').sideEffect{it.rank = idx} }

我使用了 Gremlin 的has上述步骤,因为它比filter简单的属性查找更有效。

于 2013-01-29T12:43:41.117 回答