2017-03-24 11 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) 

データセットは以下のとおりです。

返品あり

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

すべてのヘルプは感謝:)

+0

MATCH(S)何 - [:SHARE_WITH] - 収集、(d)の返りs.name( d.name)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

関連する問題