【问题标题】:Java GraphTraversal output Gremlin queryJava GraphTraversal 输出 Gremlin 查询
【发布时间】:2020-05-07 18:02:22
【问题描述】:

如何从 Java GraphTraversal 对象输出 Gremlin 查询?默认输出(graphTraversal.toString())看起来像[HasStep([~label.eq(brand), name.eq(Nike), status.within([VALID])])],不容易阅读。

【问题讨论】:

    标签: graph gremlin tinkerpop


    【解决方案1】:

    Gremlin 提供了 GroovyTranslator 类来帮助解决这个问题。这是一个例子。

    // Simple traversal we can use for testing a few things
    Traversal t = 
      g.V().has("airport","region","US-TX").
            local(values("code","city").
            fold());
    
    
    // Generate the text form of the query from a Traversal
    String query;
    query = GroovyTranslator.of("g").
            translate(t.asAdmin().getBytecode());
    
    System.out.println("\nResults from GroovyTranslator on a traversal");
    System.out.println(query);
    

    这取自此处的一组示例:https://github.com/krlawrence/graph/blob/master/sample-code/RemoteWriteText.java

    【讨论】:

      【解决方案2】:

      您可以在DefaultGraphTraversal 上使用getByteCode() 方法来获取输出gremlin 查询。

      例如,考虑下图

       Graph graph = TinkerGraph.open();
              Vertex a = graph.addVertex(label, "person", "name", "Alex", "Age", "23");
              Vertex b = graph.addVertex(label, "person", "name", "Jennifer", "Age", "20");
              Vertex c = graph.addVertex(label, "person", "name", "Sophia", "Age", "22");
              a.addEdge("friends_with", b);
              a.addEdge("friends_with", c);
      

      得到一个图遍历如下:

              GraphTraversalSource gts = graph.traversal();
              GraphTraversal graphTraversal = 
              gts.V().has("name","Alex").outE("friends_with").inV().has("age", P.lt(20));
      

      现在您可以将遍历作为字符串:

       String traversalAsString = graphTraversal.asAdmin().getBytecode().toString();
      

      它给你的输出是:

      [[], [V(), has(name, Alex), outE(friends_with), inV(), has(age, lt(20))]]
      

      它更具可读性,几乎就像您提供的查询一样。如果您想替换 [,],现在可以修改/解析字符串以获取实际查询,像在实际查询中一样添加与 . 连接。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-15
        • 2019-05-14
        相关资源
        最近更新 更多