【问题标题】:Gremlin: Adding Edges to Graph Over HTTP using Vertex VariablesGremlin:使用顶点变量通过 HTTP 向图形添加边
【发布时间】:2019-02-26 14:57:22
【问题描述】:

我正在尝试通过 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()"}

我得到了异常

遍历策略已完成,无法再遍历 被调制","Exception-Class":"java.lang.IllegalStateException"

另外请注意,我将整个 gremlin 加入一行,然后通过 curl 发送。为了便于阅读,我已将它们拆分为换行符。任何帮助都会很棒。 -- 谢谢

【问题讨论】:

    标签: gremlin janusgraph gremlin-server


    【解决方案1】:

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

    【讨论】:

    • 非常感谢,斯蒂芬。我误解了迭代的含义。我以为它返回一个顶点,所以我没有意识到我可以做到.addE().from().to()
    • 你可以按照你的方式来做,但不是iterate(),你会做next(),但作为一个单一的遍历通常会更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 2020-12-13
    • 1970-01-01
    相关资源
    最近更新 更多