Neo4j - 基于关系的组节点

时间:2017-03-24 14:51:35

标签: neo4j cypher

我开始使用Neo4j并尝试对彼此有关系的节点进行分组。

数据集如下:

create (user1 {name:'user1'}), (user2 {name:'user2'}), (user3 {name:'user3'}), (user4 {name:'user4'}), (user5 {name:'user5'}), (user6 {name:'user6'}),
(user1)-[:SHARE_WITH]->(user2),
(user1)-[:SHARE_WITH]->(user3),
(user1)-[:SHARE_WITH]->(user4),
(user2)-[:SHARE_WITH]->(user4),
(user5)-[:SHARE_WITH]->(user6)

我的目标是:

group1: [user1, user2, user3, user4]
group2: [user5, user6]

我能做到的最好的是

MATCH (s)-[:SHARE_WITH]->(d) RETURN s.name, collect(d.name)

返回

user1   [user4, user3, user2]
user2   [user4]
user5   [user6]

任何帮助表示赞赏:)

1 个答案:

答案 0 :(得分:3)

在图论中,这种结的子集称为Cliqueevery two distinct vertices in the clique are adjacent。用于查找此类子集的密码无效。

但您可以使用名为apoc.algo.cliques的用户程序和函数库中的APOC过程:

CALL apoc.algo.cliques(2) YIELD clique
RETURN EXTRACT(n in clique | n.name)