gremlin python 子图总是空的
gremlin python subgraph always empty
我使用 gremlin python 像这样连接 gremlin 服务器:
g = traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin', 'g'))
但是当我使用子图时(在此处引用http://tinkerpop.apache.org/docs/current/reference/#subgraph-step):
g.V().has(*vertex).repeat(__.inE().subgraph('subGraph').outV()).times(1).cap('subGraph').toList()
结果总是空的,像这样:[{}]
我哪里错了?如何使用 gremlin-python?
获取子图
Gremlin 语言变体 (GLV) (TINKERPOP-2063) 尚不支持 tree()
和 subgraph()
步骤。主要问题是 GLV 不是完整的 Gremlin 虚拟机实现,因此没有 Graph
实例来反序列化子图。
要解决此限制,您需要自己捕获子图作为副作用来收集其数据。例如,您可以为此目的使用 store()
,如以下示例所示,其中我抓取了一个 "knows" 子图:
gremlin> g.V().hasLabel('person').store('v').by(elementMap()).
......1> outE('knows').store('e').by(elementMap()).
......2> inV().store('v').by(elementMap()).
......3> cap('v').dedup().
......4> project('vertices','edges').
......5> by().
......6> by(cap('e')).next()
==>vertices={{id=1, label=person, myid=1, name=marko, age=29}=1, {id=2, label=person, myid=2, name=vadas, age=27}=2, {id=4, label=person, myid=4, name=josh, age=32}=2, {id=6, label=person, myid=6, name=peter, age=35}=1}
==>edges={{id=7, label=knows, IN={id=2, label=person}, OUT={id=1, label=person}, weight=0.5}=1, {id=8, label=knows, IN={id=4, label=person}, OUT={id=1, label=person}, weight=1.0}=1}
如果出于某些原因您绝对必须使用 subgraph()
,那么唯一的其他选择就是发送 Gremlin 脚本(而不是字节码)。该脚本将首先像您的示例中那样使用 subgraph()
执行遍历,然后在同一脚本中将子图写入 GraphSON 字符串(或类似字符串)。 Python 然后将获得图形的字符串表示形式。当然,您随后必须在客户端以某种方式处理该格式。
我使用 gremlin python 像这样连接 gremlin 服务器:
g = traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin', 'g'))
但是当我使用子图时(在此处引用http://tinkerpop.apache.org/docs/current/reference/#subgraph-step):
g.V().has(*vertex).repeat(__.inE().subgraph('subGraph').outV()).times(1).cap('subGraph').toList()
结果总是空的,像这样:[{}]
我哪里错了?如何使用 gremlin-python?
获取子图Gremlin 语言变体 (GLV) (TINKERPOP-2063) 尚不支持 tree()
和 subgraph()
步骤。主要问题是 GLV 不是完整的 Gremlin 虚拟机实现,因此没有 Graph
实例来反序列化子图。
要解决此限制,您需要自己捕获子图作为副作用来收集其数据。例如,您可以为此目的使用 store()
,如以下示例所示,其中我抓取了一个 "knows" 子图:
gremlin> g.V().hasLabel('person').store('v').by(elementMap()).
......1> outE('knows').store('e').by(elementMap()).
......2> inV().store('v').by(elementMap()).
......3> cap('v').dedup().
......4> project('vertices','edges').
......5> by().
......6> by(cap('e')).next()
==>vertices={{id=1, label=person, myid=1, name=marko, age=29}=1, {id=2, label=person, myid=2, name=vadas, age=27}=2, {id=4, label=person, myid=4, name=josh, age=32}=2, {id=6, label=person, myid=6, name=peter, age=35}=1}
==>edges={{id=7, label=knows, IN={id=2, label=person}, OUT={id=1, label=person}, weight=0.5}=1, {id=8, label=knows, IN={id=4, label=person}, OUT={id=1, label=person}, weight=1.0}=1}
如果出于某些原因您绝对必须使用 subgraph()
,那么唯一的其他选择就是发送 Gremlin 脚本(而不是字节码)。该脚本将首先像您的示例中那样使用 subgraph()
执行遍历,然后在同一脚本中将子图写入 GraphSON 字符串(或类似字符串)。 Python 然后将获得图形的字符串表示形式。当然,您随后必须在客户端以某种方式处理该格式。