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

时间:2019-02-26 14:57:22

标签: gremlin janusgraph gremlin-server

我正在尝试针对远程JanusGraph实例通过https执行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()"}

我得到了例外

  

遍历策略已经完成,遍历不再   被调制“,” Exception-Class“:” java.lang.IllegalStateException“

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

1 个答案:

答案 0 :(得分:2)

iterate()不会返回Vertex ...它只是遍历遍历以产生副作用(即,图形获得了添加的顶点,但未返回结果)。您可能只需要这样做:

{"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()"}