可重用的遍历组件并不总是与gremlin一起工作
我试图通过将遍历组件放入函数中,使用gremlinpython为遍历创建可重用组件,但遇到了一些遍历组件无法正常工作的问题 作为安装程序,我正在使用docker容器运行gremlin server,配置文件从 我的测试python代码如下所示:可重用的遍历组件并不总是与gremlin一起工作,gremlin,gremlin-server,gremlinpython,Gremlin,Gremlin Server,Gremlinpython,我试图通过将遍历组件放入函数中,使用gremlinpython为遍历创建可重用组件,但遇到了一些遍历组件无法正常工作的问题 作为安装程序,我正在使用docker容器运行gremlin server,配置文件从 我的测试python代码如下所示: from gremlin_python.process.anonymous_traversal import traversal from gremlin_python.process.graph_traversal import __ from gre
from gremlin_python.process.anonymous_traversal import traversal
from gremlin_python.process.graph_traversal import __
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
def connect_gremlin(endpoint='ws://localhost:8182/gremlin'):
return traversal().withRemote(DriverRemoteConnection(endpoint,'g'))
def n():
return __.values('name')
def r():
return __.range(2,4)
g = connect_gremlin()
# works as expected
g.V().map(n()).toList()
# returns an empty list
g.V().map(n()).filter(r()).toList()
# but using range step directly works as expected
g.V().map(n()).range(2,4).toList()
我可以成功地将
值
步骤移动到函数中,但当我尝试对范围
步骤执行相同操作时,它会返回一个空列表,而不是第2到第4项。有人知道我做错了什么吗?映射步骤旨在将每个遍历器的状态映射到新状态。在单个遍历器的上下文中,从零以外的任何位置开始的范围
不会达到预期效果
下面是一些使用Python的示例:
>>> g.V().map(__.range(0,1)).limit(5).toList()
[v[1400], v[1401], v[1402], v[1403], v[1404]]
>>> g.V().map(__.range(0,2)).limit(5).toList()
[v[1400], v[1401], v[1402], v[1403], v[1404]]
>>> g.V().map(__.range(1,2)).limit(5).toList()
[]
这就是为什么值
步骤在映射
步骤中工作,而范围
不工作的原因
与其使用
map
步骤注入代码,为什么不只是增量地添加到遍历中,然后在完成时迭代它呢?我想如果你一定要以这种方式使用map()
,那么你必须fold()
然后range(local)
比如:g.V().fold().map(range(local,2,4))
但这还不如将整个流实现为一个列表
来对其进行切片。我的实际使用可能会更复杂一些,因为我希望有几个遍历步骤,我希望“混合”到更大的遍历中。我在遍历中使用的一种常见模式类似于order().by(A).range(x,y)
,因此我希望有一种方法将它们封装到函数中。
>>> g.V().map(__.range(0,1)).limit(5).toList()
[v[1400], v[1401], v[1402], v[1403], v[1404]]
>>> g.V().map(__.range(0,2)).limit(5).toList()
[v[1400], v[1401], v[1402], v[1403], v[1404]]
>>> g.V().map(__.range(1,2)).limit(5).toList()
[]