基于Java/Scala的远程Gremlin服务器图形变异
我正在尝试使用遍历在远程Gremlin服务器上获取修改顶点,但似乎只有在创建顶点的遍历中,我还可以添加属性,在开始新的遍历时,我不会添加属性 Scala/Java群集连接设置代码:基于Java/Scala的远程Gremlin服务器图形变异,java,server,gremlin,tinkerpop,Java,Server,Gremlin,Tinkerpop,我正在尝试使用遍历在远程Gremlin服务器上获取修改顶点,但似乎只有在创建顶点的遍历中,我还可以添加属性,在开始新的遍历时,我不会添加属性 Scala/Java群集连接设置代码: val mapper = GryoMapper.build() val cluster = Cluster.build().serializer(new GryoMessageSerializerV1d0(mapper)).create val client = cluster.connect[org.apache.
val mapper = GryoMapper.build()
val cluster = Cluster.build().serializer(new GryoMessageSerializerV1d0(mapper)).create
val client = cluster.connect[org.apache.tinkerpop.gremlin.driver.Client.ClusteredClient]()
val graph = EmptyGraph.instance()
val g = graph.traversal().withRemote(DriverRemoteConnection.using(cluster, "g"))
这项工作:
val v1 = g.addV("person").property("name","stephen").next()
这并不是:
g.V(v1.id()).property("age","27")
由于顶点是org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex,因此这不会甚至抛出java.lang.IllegalStateException(propertyAdditionNotSupported):
v1.property("age","27")
如果我使用Gremlin控制台和远程连接到Gremlin服务器,我会毫无问题地同时使用这两种方式
:remote connect tinkerpop.server conf/remote.yaml
gremlin> :> g.addV('person').property('name','stephen')
==>v[82128]
gremlin> :> g.V(82128).property('age','27')
==>v[82128]
gremlin> :> g.V(82128).valueMap()
==>[name:[stephen],age:[27]]
Java远程实现是否存在错误,或者我是否遗漏了什么?我不确定您使用的是什么图形实现,但这对我来说适用于TinkerGraph:
gremlin> graph = EmptyGraph.instance()
==>emptygraph[empty]
gremlin> cluster = Cluster.open()
==>localhost/127.0.0.1:8182
gremlin> g = graph.traversal().withRemote(DriverRemoteConnection.using(cluster, "g"))
==>graphtraversalsource[emptygraph[empty], standard]
gremlin> v = g.addV().property('name','stephen').next()
==>v[0]
gremlin> g.V(v.id()).property('favorite','red')
==>v[0]
gremlin> g.V().valueMap()
==>[name:[stephen],favorite:[red]]
我会注意到,在您的情况下,您不会从以下位置next()
取出顶点:
val v1 = g.addV("person").property("name","stephen")
我假设即使在Gremlin Scala语法中,您也必须执行以下操作:
val v1 = g.addV("person").property("name","stephen").next()
否则,v1
将只是一个遍历
实例,您将获得遍历
的id()
,而不是顶点
。所以我认为这应该可以解决你的问题
请注意,v1.property(“age”,“27”)
将不起作用,原因是您解释过的-顶点是“分离的”,您不能直接使用它,除非将它传递回另一个遍历。您还应该能够在大多数图形上执行此操作:
gremlin> g.V(v).property('favorite','red')
==>v[0]
不引用id()
您需要确保。斯蒂芬的回答提到了这一点。Gremlin控制台会自动迭代遍历,而您必须自己显式地执行此操作
get zero resultiterate()
获取一个结果next()
获得许多结果toList()
本教程也是一本关于结果迭代的好书谢谢您的回复。我使用了正确的顶点id,但删除了一些可选的Scala代码(我编辑了原始问题并添加了.next())。您的示例来自于Gremlin控制台,我认为这是可行的,我也可以在Gremlin控制台中执行此操作。但是Scala/Java程序中的远程连接不允许我修改现有顶点。我尝试了TinkerGraph和JanusGraph,两者都不起作用,所以我假设它在Java实现中..找到了解决方案,不得不在遍历之后添加.iterate(),仍然试图理解为什么。。。