【问题标题】:Gremlin merge two traversalsGremlin 合并两个遍历
【发布时间】:2021-11-27 00:24:03
【问题描述】:

我有 2 个遍历:1 个按标签查找顶点,另一个按标签查找边,我正在尝试合并它们,即获取具有 vertexlabel 的顶点的所有 edgeLabel 边strong> 标签。

顶点遍历:

graph.traversal().V().hasLabel("vertexLabel")

边遍历函数(必须是不同的函数):

private GraphTraversal<Vertex, Edge> getEdges() {
    return __.inE("edgeLabel");
}

我尝试了以下方法,但没有成功

graph.traversal().V().hasLabel("vertexLabel").and(getEdges())

【问题讨论】:

  • 我很好奇你为什么要在查询中注入遍历而不是仅仅参数化查询本身?您的示例可能只是您要构建的更复杂事物的简单案例吗?

标签: java gremlin tinkerpop graphdb


【解决方案1】:

您可以使用andfilter(取决于您正在遍历的具体Traversal

TinkerGraph g = TinkerGraph.open();

/*
         u:A
<1:A> ---------- <2:B>
  |                |
  | x:B            | v:B
  |                |
<4:B> ---------- <3:A>
         w:A
*/

Vertex v1 = g.addVertex(T.label, "A", T.id, 1);
Vertex v2 = g.addVertex(T.label, "B", T.id, 2);
Vertex v3 = g.addVertex(T.label, "A", T.id, 3);
Vertex v4 = g.addVertex(T.label, "B", T.id, 4);

v1.addEdge("A", v2, T.id, "u");
v2.addEdge("B", v3, T.id, "v");
v3.addEdge("A", v4, T.id, "w");
v4.addEdge("B", v1, T.id, "x");

// predefined traversal from somewhere
Traversal<Vertex, Vertex> vertexFilter = __.hasLabel("A");
Traversal<Vertex, Vertex> edgeFilter = __.hasLabel("B");
Traversal<Vertex, Edge> vertex2edges = __.bothE().filter(edgeFilter);
Traversal<Edge, Vertex> edge2vertex = __.bothV().filter(vertexFilter);

System.out.println("Get edges matching filter with any vertex matching filter:");
g.traversal().E().filter(edgeFilter).and(edge2vertex).toList()
        .forEach(e -> System.out.printf(" - %s%n", e.id()));

System.out.println("Get vertex matching filter with any edge matching filter:");
g.traversal().V().filter(vertexFilter).and(vertex2edges).toList()
        .forEach(v -> System.out.printf(" - %s%n", v.id()));

有输出

Get edges matching filter with any vertex matching filter:
 - v
 - x
Get vertex matching filter with any edge matching filter:
 - 1
 - 3

【讨论】:

  • 谢谢,但这不是问题的答案。需要结合 2 个遍历,因此在您的情况下,将 .bothE("edgeLabel") 提取到不同的函数
  • 哦,对不起,然后简单地将遍历放在组合器中(filterandmap,...)。我已经更新了答案。
猜你喜欢
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多