gremlin python子图始终为空
我使用gremlin python连接gremlin服务器,如下所示:gremlin python子图始终为空,gremlin,subgraph,gremlinpython,Gremlin,Subgraph,Gremlinpython,我使用gremlin python连接gremlin服务器,如下所示: g = traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin', 'g')) 但当我使用子图(此处引用)时: 结果总是空的,如下所示:[{}] 我错在哪里?如何使用gremlin python获取子图?gremlin语言变体(GLV)()中尚不支持树()和子图()步骤。主要的问题是glv不是完整的Gremlin虚拟机实现,因此没
g = traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin', 'g'))
但当我使用子图(此处引用)时:
结果总是空的,如下所示:[{}]
我错在哪里?如何使用gremlin python获取子图?gremlin语言变体(GLV)()中尚不支持树()
和子图()
步骤。主要的问题是glv不是完整的Gremlin虚拟机实现,因此没有一个图实例将子图反序列化到其中
为了克服这个限制,您需要自己捕获子图作为副作用来收集其数据。例如,您可以为此使用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> 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}