【发布时间】:2015-06-29 19:56:50
【问题描述】:
我有一个包含 2 种节点的有向 Neo4j 图:Set 1 中带有标签的节点和 Set 2 中带有标签的节点。我想在 Set 1 中的节点之间创建新边(新类型),每当有从 Set 1 节点到另一个 Set 1 节点的有向路径仅通过 Set 2 节点(可能有 0 个这样的 Set 2 节点)。
这是一个示例数据集:
CREATE (a:A {id:"a"})-[:CONN]->(t1:T {id:"t1"}),
(t1)-[:CONN]->(b1:B {id:"b1"}),
(b1)-[:CONN]->(t2:U {id:"t1"}),
(t2)-[:CONN]->(c1:C {id:"c1"}),
(c1)-[:CONN]->(t3:T {id:"t3"}),
(t3)-[:CONN]->(d1:D {id:"d1"}),
(t3)-[:CONN]->(d2:D {id:"d2"}),
(d1)-[:CONN]->(t4:T {id:"t4"}),
(d2)-[:CONN]->(t4),
(t4)-[:CONN]->(e1:E {id:"e1"}),
(t4)-[:CONN]->(e2:E {id:"e2"})
在这个例子中,A、B、C、D、&E 在第 1 组中,T&U 在第 2 组中,所以我想画新的:AGG 边缘像这样:
MATCH (a:A {id:"a"}), (b1:B {id:"b1"}), (c1:C {id:"c1"}), (d1:D {id:"d1"}),
(d2:D {id:"d2"}), (e1:E {id:"e1"}), (e2:E {id:"e2"})
CREATE (a)-[:AGG]->(b1),
(b1)-[:AGG]->(c1),
(c1)-[:AGG]->(d1),
(c1)-[:AGG]->(d2),
(d1)-[:AGG]->(e1),
(d1)-[:AGG]->(e2),
(d2)-[:AGG]->(e1),
(d2)-[:AGG]->(e2)
关于CONN 边,我知道该图是一个有向无环图,所以我不必担心循环。
这可以在 Cypher 中完成吗?或者有人可以通过 Java 接口提出一种有效的方法(例如遍历策略)?谢谢。
【问题讨论】: