Java图遍历输出Gremlin查询

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

6

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);

这段内容摘自此处提供的示例代码。


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))]]

这个更易读,几乎像您提供的查询一样。您现在可以修改/解析字符串以获取实际查询,例如替换[,],用.连接它们,就像实际查询一样。


虽然有些有用,但是没有现成的工具可以处理“toString”字节码格式。GroovyTranslator方法将会返回一个实际的Gremlin查询字符串。该查询可以直接复制粘贴到Gremlin Console等工具中。 - Kelvin Lawrence

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接