如何在gremlin中定义返回与gremlin shell相同结果的函数?

时间:2014-01-07 15:17:13

标签: groovy gremlin titan bulbs

我目前正在使用TinkerPop Gremlin(带有Titan后端)来实现“类似文档”算法。

下一行在gremlin shell中运行得非常好:

v = g.v(880068)
m=[:]
v.as('x').out('auto_tag').in('auto_tag').has('status', 1).except('x').groupCount(m).filter{false}
results=[]
m.sort{-it.value}[0..9].each(){key, value -> results.add(key.document_id) }
results

以下结果可见:

==>3188749
==>3190640
==>3191407
==>3187753
==>3186634
==>3185534
==>3189883
==>3190108
==>3187088
==>3188890

但是当我尝试在函数中“包装”相同的代码时,它不再起作用了:

v = g.v(880068)

def get_similar_documents(v) {
    m=[:]
    v.as('x').out('auto_tag').in('auto_tag').has('status', 1).except('x').groupCount(m).filter{false}
    results=[]
    m.sort{-it.value}[0..9].each(){key, value -> results.add(key.document_id) }
    return results
}

get_similar_documents(v)

......没有回复

来自Python后端,我认为这与变量范围有关,但到目前为止我还不明白如何修复它。

提前感谢您提供任何帮助

编辑:我正在使用Bulbs,这就是为什么我想把我的代码包装在一个函数中(以后我可以用Python调用)

1 个答案:

答案 0 :(得分:2)

我认为您需要在iterate函数内get_similar_documents管道v.as('x').out('auto_tag').in('auto_tag').has('status', 1).except('x').groupCount(m).filter{false}.iterate() 。含义:

m

重要的是要记住Gremlin Shell会自动为您管道。 shell不会在函数内迭代它,因此groupCount中的{{1}}不会产生任何副作用。

您可以阅读有关here的更多信息。