可重复使用的遍历组件并不总是与 gremlin 一起工作
reusable traversal components not always working with gremlin
我正在尝试通过将遍历组件放入函数中来使用 gremlin python 为我的遍历创建可重用组件,但我 运行 遇到了一些遍历组件不存在的问题工作正常。
作为设置,我是 运行 gremlin 服务器,使用 docker 容器,配置文件从 github repo
加载到现代图形中
docker run -p 8182:8182 tinkerpop/gremlin-server:3.4.6 conf/gremlin-server-modern.yaml
我的测试 python 代码如下所示:
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()
我可以成功地将 values
步骤移动到一个函数中,但是当我尝试用 range
步骤做同样的事情时,它 returns 一个空列表而不是第二个到第 4 项。有人知道我做错了什么吗?
map
步骤的目的是将每个遍历器的状态映射到一个新的状态。在单个遍历器的上下文中,range
从零开始的任何地方都不会按照您的预期进行。
以下是一些使用 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()
[]
这就是 values
步骤在 map
步骤中起作用而 range
不起作用的原因。
而不是使用 map
步骤注入代码,为什么不增量地添加到遍历中,然后在完成时迭代它?
我正在尝试通过将遍历组件放入函数中来使用 gremlin python 为我的遍历创建可重用组件,但我 运行 遇到了一些遍历组件不存在的问题工作正常。
作为设置,我是 运行 gremlin 服务器,使用 docker 容器,配置文件从 github repo
加载到现代图形中docker run -p 8182:8182 tinkerpop/gremlin-server:3.4.6 conf/gremlin-server-modern.yaml
我的测试 python 代码如下所示:
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()
我可以成功地将 values
步骤移动到一个函数中,但是当我尝试用 range
步骤做同样的事情时,它 returns 一个空列表而不是第二个到第 4 项。有人知道我做错了什么吗?
map
步骤的目的是将每个遍历器的状态映射到一个新的状态。在单个遍历器的上下文中,range
从零开始的任何地方都不会按照您的预期进行。
以下是一些使用 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()
[]
这就是 values
步骤在 map
步骤中起作用而 range
不起作用的原因。
而不是使用 map
步骤注入代码,为什么不增量地添加到遍历中,然后在完成时迭代它?