Tinkerpop & Python - 通过 gremlin 设置数组属性

Bar*_*kin 5 python gremlin tinkerpop tinkerpop3 janusgraph

我将 JanusGraph 与标准 python gremlin 绑定一起使用,我想float[]在顶点/边上设置一个属性。但是,PythonTinkerpop 驱动程序似乎无法做到这一点。

例如,下面是一个直接在 Groovy 中运行的脚本示例:

val = [1.2, 3.4, 5.6]
_client.submit("g.V(4200).property('a', %s as float[])" % val).all().result()
Run Code Online (Sandbox Code Playgroud)

这是使用 gremlin python 库时失败的代码:

val = [1.2, 3.4, 5.6]
g.V(4200).property('a', val).next()
Run Code Online (Sandbox Code Playgroud)

错误在哪里:

GremlinServerError: 500: Property value [[1.2, 3.4, 5.6]] is of type class java.util.ArrayList is not supported
Run Code Online (Sandbox Code Playgroud)

该错误可能是因为请求是由 python 驱动程序在 GraphSON 中序列化的 - 并且 GraphSON 支持具有不同类型元素的数组,因此场景背后的 Java 代码将值读取为 a java.util.ArrayList,而实际上无法转换为float[].

问题是 - 除了编写显式查询字符串之外,是否有任何理智的方法可以做到这一点?

ste*_*tte 1

这个问题已经讨论过几次,JanusGraph 并不是唯一存在类型强制问题的图数据库。从 TinkerPop 的角度来看,图应该 (1) 尝试将 TinkerPop 类型强制为图模式中定义的适当类型或以其他方式被图接受,或者 (2) 提供额外的序列化或其他库支持以允许将这些类型公开给他们的用户。

据我所知,除了使用您已经发现的脚本之外,没有其他解决方法。请注意,JanusGraph 已经有一个解决此问题的开放问题。