可重用遍历组件并不总是与gremlin一起使用

问题描述 投票:0回答:1

[我试图通过将遍历组件放入函数中来使用gremlin python创建遍历的可重用组件,而我遇到了一些遍历组件无法正常工作的问题。

作为设置,我正在使用docker容器运行gremlin服务器,并且配置文件从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步骤执行相同的操作时,它将返回一个空列表,而不是第二至第四项。有人知道我在做什么错吗?

[我试图通过将遍历组件放入函数中来使用gremlin python创建遍历的可重用组件,而我遇到了一些遍历组件...] >>

<
map步骤旨在将每个穿越器的状态映射到新状态。在单个遍历器的上下文中,range从任何地方开始但零开始都无法满足您的期望。
以下是一些使用Python的示例:

>>> g.V().map(__.range(0,1)).limit(5) [['V'], ['map', [['range', 0, 1]]], ['limit', 5]] >>> 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 gremlin-server gremlinpython
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.