2017-07-29 8 views
0

neo4j nodes and relationshipsこれはかなり大変な仕事である

のNeo4jにCYPHERを使用してある特定のノードから開始し、双方向の関係を持つすべてのノードを検索します。私は、特定のノードから始まる双方向関係を持つすべてのノードを見つけることを試みています。上記の画像に基づいて、ノード1から始まるすべての双方向関係を探したいと思います。双方向関係を持つノードだけが一致します。たとえば、ノード1,3,4が一致し、ノード1,2,3が2つの別個のグループとして一致します。しかし、ノード2および4が双方向関係を有する場合、ノード1,2,3,4は1つのグループとして一致する。主な考え方は、すべてのノードがそのようなグループ内で両方向にリンクされていることです。私の考えは、1から始まる双方向関係を持つすべてのノードを見つけて処理を続けることですが、私は続行できません。誰もこの問題で助けてくれますか、ありがとうございます。ちなみに、最大の「ツーウェイサークル」だけが必要です。

+0

いずれかお手伝いできますか?とても難しい。 –

答えて

0

あなたの問題は、グラフに強く結びついたコンポーネントを見つけるのに似ています。ドキュメントに定義されています。

すべての の頂点(ノード)の間にパスがある場合、有向グラフは強く接続されます。このアルゴリズムは、指示されたようにグラフを扱うので、 方向のノード間に関係がある場合にのみ、関係の方向が重要であり、強く接続されている が存在します。

詳しくはdocumentationを参照してください。 neo4j-graph-algorithmsが必要です。

グラフのコンポーネントをノードに書き戻す例を示します。

CALL algo.scc('Label','C', {write:true,partitionProperty:'partition'}) 
YIELD loadMillis, computeMillis, writeMillis, setCount, maxSetSize, minSetSize 

次に、次のクエリで最も大きなコンポーネントを見つけることができます。

MATCH (u:Label) 
RETURN distinct(u.partition) as partition,count(*) as size_of_partition 
ORDER by size_of_partition DESC LIMIT 1 
+0

多くの点を気に入ってください。しかし、私は試して、それは動作しませんでした。このアルゴリズムは、双方向の関係サークルを作ることができるノードだけを決定することができますが、このサークル内のすべてのノードが双方向に接続されていることを確認することはできません。例えば、2と4は私の写真では接続されていませんが、グラフアルゴリズムで問題を解決しようとすると1,2,3,4の結果が得られます。正しい結果は1,2,3と1です。 3,4。 2と4が接続されていて1,2,3,4が私の必要性を満たすことができる場合のみ。 –

関連する問題