Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Java/Scala的远程Gremlin服务器图形变异_Java_Server_Gremlin_Tinkerpop - Fatal编程技术网

基于Java/Scala的远程Gremlin服务器图形变异

基于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.

我正在尝试使用遍历在远程Gremlin服务器上获取修改顶点,但似乎只有在创建顶点的遍历中,我还可以添加属性,在开始新的遍历时,我不会添加属性

Scala/Java群集连接设置代码:

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控制台会自动迭代遍历,而您必须自己显式地执行此操作

  • iterate()
    get zero result
  • next()
    获取一个结果
  • toList()
    获得许多结果

本教程也是一本关于结果迭代的好书

谢谢您的回复。我使用了正确的顶点id,但删除了一些可选的Scala代码(我编辑了原始问题并添加了.next())。您的示例来自于Gremlin控制台,我认为这是可行的,我也可以在Gremlin控制台中执行此操作。但是Scala/Java程序中的远程连接不允许我修改现有顶点。我尝试了TinkerGraph和JanusGraph,两者都不起作用,所以我假设它在Java实现中..找到了解决方案,不得不在遍历之后添加.iterate(),仍然试图理解为什么。。。