我目前正在使用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调用)
答案 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的更多信息。