根据等式生成不相交的星形子图

时间:2018-10-09 12:53:14

标签: neo4j cypher

考虑这个玩具示例:

MERGE (:Obj {desc:'A',id:1})
MERGE (:Obj {desc:'A',id:2})
MERGE (:Obj {desc:'A',id:3})
MERGE (:Obj {desc:'A',id:4})
MERGE (:Obj {desc:'B',id:5})
MERGE (:Obj {desc:'B',id:6})

我有6个不同的节点,但是描述只有两个不同的值(因此,只有两类节点)。假设我现在想创建一个关系SAME_AS,所有具有相同描述的节点都将通过该关系被连接。也就是说,我应该能够从节点 x 到达遍历SAME_AS关系的具有相同描述的所有其他节点。

对于连接的子组件,我更喜欢星形图,其中对于每个类别,具有最小id的节点都充当原型,而所有其他等价节点链接到。 (另一种可能性不是很好,可能是哈密顿路径)

到目前为止,我只想到了这个

MATCH (o1:Obj), (o2:Obj)
WHERE o1.desc=o2.desc AND o1.id<o2.id
MERGE (o1)<-[:SAME_AS]-(o2) 

但是它为每个班级建立了一个派系。

MATCH语句中使用FOREACH需要更好的解决方案,这在neo4j中是不允许的。

我什至不知道是否适合使用cypher,或者我是否应该在neo4j之外执行这些计算,然后才将信息写入数据库。

谢谢

1 个答案:

答案 0 :(得分:1)

这样的事情怎么样

ct_data_p