Gremlin:使用顶点变量通过 HTTP 向图形添加边

Gremlin: Adding Edges to Graph Over HTTP using Vertex Variables

我正在尝试通过 https 对远程 JanusGraph 实例执行 gremlin 脚本。我已将我的问题过滤到我尝试使用顶点变量添加边的部分。我正在尝试添加两个顶点,将结果分配给一个变量并使用它们添加一条边。此外,由于脚本

背后的程序逻辑,我也尽量避免使用像 g.V().addV(..).aaddV(..).addE(..) 这样的单行脚本

以下 gremlin 在 gremlin 控制台(远程会话)中运行

def graph=ConfiguredGraphFactory.open("ga"); 
def g = graph.traversal(); 
v1=g.addV('node1');
v2=g.addV('node2');
v1.addE('test').to(v2);

但是当我尝试通过 https(针对 compose-janusgraph 服务器发布)执行相同操作时,出现错误。我确实将 .iterate() 添加到 addV(),如果我删除 addE(..) 行,则会添加顶点。但是当我尝试

{"gremlin":"def graph=ConfiguredGraphFactory.open('ga'); 
def g = graph.traversal();
v1=g.addV('node16').property('name','testn16').iterate();
v2=g.addV('node17').property('name','testn2').iterate();
v1.addE('test18').to(v2);
g.tx().commit()"}

我得到异常

The traversal strategies are complete and the traversal can no longer be modulated","Exception-Class":"java.lang.IllegalStateException"

另请注意,在通过 curl 发送之前,我将整个 gremlin 连接成一行。为了便于阅读,我在这里将它们拆分为换行符。任何帮助都会很棒。 -- 谢谢

iterate() 不是 return Vertex...它只是迭代遍历以产生副作用(即图形添加了一个顶点但没有结果是 returned)。你可能只需要做:

{"gremlin":"graph=ConfiguredGraphFactory.open('ga'); 
g = graph.traversal();
g.addV('node16').property('name','testn16').as('v1').
  addV('node17').property('name','testn2').as('v2').
  addE('test18').from('v1').to('v2').iterate();
g.tx().commit()"}