【问题标题】:gremlin python clone traversalgremlin python 克隆遍历
【发布时间】:2020-07-09 17:48:17
【问题描述】:

我正在使用 gremlin-python 连接到 gremlin-server,我正在尝试逐步构建查询,但我遇到了问题。我的查询的初始部分如下所示:

query = g.V().hasLabel('<some_label>')

现在我想用这个查询做很多事情,首先我只想要一个计数:

query.count().next()

现在,如果我使用 query 变量执行任何其他操作,则计数步骤在遍历中,因此类似以下的操作不起作用:

query.out('<some_edge_label>').valueMap().toList()

查看文档似乎我需要克隆遍历,所以我将上面的内容替换为:

query = g.V().hasLabel('<some_label>')

count_query = query.clone()
count_query.count().next()

但是query 仍然有count() 步骤,当我打印字节码时,即使我克隆了它。这是 gremlin-python 的预期行为吗?这是我正在谈论的完整示例,在每个步骤中打印字节码:

query = g.V().hasLabel('alabel')
print(query)
q_count = query.clone()
print(q_count.count())
print(query)

[['V'], ['hasLabel', 'alabel']]
[['V'], ['hasLabel', 'alabel'], ['count']]
[['V'], ['hasLabel', 'alabel'], ['count']]

如何克隆/复制遍历的开始,以便在 gremlin-python 中重用它?

【问题讨论】:

  • 您使用的是哪个版本的 Python 客户端?在 3.4.7 (3.3.11) 版本(2020 年 6 月)中对深度克隆遍历领域进行了一些修复
  • 是的,这就是问题
  • 酷我会做一个快速回答的帖子,以防其他人看到这个并有同样的问题。

标签: gremlin tinkerpop3 gremlinpython


【解决方案1】:

在 3.4.7 (3.3.11) [1] [2] Apache TinkerPop 版本(2020 年 6 月)中对深度克隆遍历进行了一些修复。安装其中一个驱动程序应该会有所帮助。

[1]https://github.com/apache/tinkerpop/blob/master/CHANGELOG.asciidoc

[2]https://issues.apache.org/jira/browse/TINKERPOP-2350

【讨论】:

    【解决方案2】:

    看起来这个问题是 gremlin-python 中的一个错误,并已在 3.4.7 版中修复。更新版本解决了我的问题。

    【讨论】: