当前位置: 首页 > 知识库问答 >
问题:

Java图形遍历输出Gremlin查询

翟志新
2023-03-14

如何从JavaGraphTraversal对象输出Gremlin查询?默认输出(graphTraversal.toString())看起来像[hastep([~label.eq(品牌)、name.eq(耐克)、status.in([VALID]))]]这不容易阅读。

共有2个答案

欧阳炜
2023-03-14

您可以在默认图形移动上使用 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))]]

它更具可读性,几乎与您提供的查询一样。现在,您可以修改/解析字符串以获得实际查询,如替换[,],添加并连接 类似于实际查询。

艾英范
2023-03-14

格雷姆林提供了格罗维转印器类来帮助解决这个问题。下面是一个示例。

// 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/kr Lawrence/graph/blob/master/sample-code/remote write text . Java

 类似资料:
  • 编辑:在@Prashant回答后,我明白我的输出顺序需要保留,因此我相应地编辑了我的原始问题并重新发布。 我想从根节点(2)遍历到叶节点(1、6、8、3、11和12)。在这种遍历过程中,我希望获取连接到产品节点13(即)的节点,我希望编写一个返回1、8、9、3、11和12的查询。 @Prashant的回答: 输出 然而,我所需输出的顺序是1、8、9、3、11和12,即在每个级别上,要求选择一个子节

  • 我只想遍历一棵树并聚合父树及其直接子树。我该如何使用Gremlin将其聚合到({parent1,child},{child,child1}…}的结构列表数组中 在这种情况下,我想输出 订单并不重要。此外,请注意,我希望避免仅在同一节点上存在的任何圆形边(从子顶点到父顶点不可能存在圆形循环) 每个顶点都有一个标签城市,每个边都有一个标签高速公路 我的查询超时了,我想知道是否有更快的方法来实现这一点。

  • 目前,结构是一棵树,但如果有循环,上面的代码是否防止了无休止的循环?如果没有,这又怎能做到呢?

  • 无论是调试的需要还是修改节点和边,你可能都需要在现有的有向有环图中进行遍历,下面就介绍图遍历的一些方法。 简单访问 节点和边有很多属性和方法是用来遍历的,边的 from 和 to 属性就是例子,而节点更多: 类型 名称 作用 属性 upstreamNodes 当前节点的所有上游节点 属性 downstreamNodes 当前节点的所有下游节点 属性 upstreamTransforms 当前节点的

  • 问题内容: 我有一个bash脚本,在其中我需要遍历find命令的输出的每一行,但是看来我正在遍历find命令中的每个Word(以空格分隔)。到目前为止,我的脚本如下所示: 我希望这会产生如下输出: 但是我很想得到这样的输出: 我在这里做错了什么? 问题答案: 由于您没有使用的任何更高级的功能,因此可以使用简单的模式来遍历子目录:

  • 我试图使用Gremlin从一个起始节点向外遍历到连接X度内的所有连接节点。连接的方向无关紧要,所以我使用了函数。我还希望能够防止遍历与特定标签相交。这是一个示例图。 到目前为止,我进行的遍历如下所示: 然而,这并不是我所寻找的。我想要一些实际上可以防止遍历者在必须跨越指定边缘时触及顶点的东西。我当前的实现过滤具有传入边缘的顶点,但在某些情况下,如果遍历者跨越不同的边缘到达那里,我可能仍然希望该顶点