2017-03-24 2 views
1

Neo4j를 시작하고 서로 관계가있는 노드를 그룹화하려고합니다.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) 

데이터 집합은 다음과 같다

어느 쪽이 건가요

4,463,210이 어떤 도움이 그래프 이론에서

+0

하는 MATCH (들) 무엇 않습니다 - : ((D) 반환 s.name 수집, - [SHARE_WITH] dname) return? – binariedMe

+0

@binariedMe, 이것은 방향에 관계없이 모든 관계를 반환하지만 출력은 더 유용하지 않습니다. 고마워요. 어쨌든 – nicobrsc

답변

3

: 감사, 노트 등의 부분 집합은 Clique라고 : every two distinct vertices in the clique are adjacent. 그런 하위 집합을 찾는 사이퍼는 효과가 없습니다.

하지만 당신은 APOC라는 사용자 프로 시저 및 함수의 라이브러리에서 절차 apoc.algo.cliques를 사용할 수 있습니다

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

감사합니다. @ stdob-- 이것은 분명 도움이됩니다. '[user1, user2, user4]'와'[user1, user3]'에 대해 별도의 클릭을 반환합니다. 아마도 내가 원하는 것을 얻기 위해 그것을 사용할 수있을 것이지만, cypher/apoc/...만을 사용하여 이러한 파벌을 모으는 다른 제안이 있습니까? – nicobrsc