2017-02-06 8 views
0

iv'eはここで質問することにしました - あなたが助けてくれることを願っています。neo4jグラフからのすべてのサブ接続された部分グラフの検索

私の問題はこれです - >私はneo4j db内のすべての未接続部分グラフを探しています。ここでの主な問題は、接続されたセット内の特定のノードから一方向へのトラバースが、接続されたセット内のすべてのノードを常にトラバースするわけではないことです - >このようなクエリでは、 :

match (a:TempNode)-[r*]->(n) 
where NOT (a)<-[:LINKED|LINKED2]-(:TempNode) 
return distinct(a.Lineage+collect(distinct(n.Lineage))) 

(2番目の 'Where'条件は、セットの '開始ノード'と仮定します)。

問題は、私のグラフは以下のような接続のセットが移入されていることを、次のとおりです。
Conncted set Example

ので、あなたが見ることができるように、それはそれらの間の一貫性のないエッジ方向と多くのノードを持っています。私はいくつかの特定のセットを取得するには、フィルタに置くが、私はすべてのsubconnectedセットをしたいと私は、内部のフィルターを入れカント、それを実行する場合

match (a:MetasetFeature)-[r*]-(n) 
return a,collect(distinct(n)) 

働く可能性があります:のような無向クエリが実行

永遠に、私は約40000のノードの量でそれらのセットの〜2000を持っています。

この問題を効率的に解決するにはどうすればよいですか?

私は、既存のグラフから新しいグラフを作成する方法を考えています。すべてのセットは、1つのノード(例えば、最小のIDを持つもの)から開始し、つまり、各サブ接続されたグループから順序付けられたセットを作成することを意味しますが、達成できませんでした。

アドバイスをいただければ幸いです。

ありがとうございます!

*編集:気にしないで、それを解決してください:)。

トラバーサルAPIへのアクセスを取得するには黙示録の手順(https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases

を使用して、他の誰かがそれを必要とする場合は、このクエリを使用して問題を解決するためにそれを使用:

黙示録の手順を使用し
MATCH (cs:SomeLabel)-[:LINKED]->(:SomeLabel) 
where NOT (cs)<-[:LINKED]-(:SomeLabel) 
CALL apoc.path.expandConfig(cs,  {relationshipFilter:"LINKED",uniqueness:"NODE_GLOBAL",bfs:false}) YIELD path 
WITH cs.Lineage as source, path 
unwind extract(x in nodes(path) | x.Lineage) as node 
with source, collect(distinct(node)) as set 
unwind set as setMember 
with source,setMember 
order by setMember 
with source,collect(setMember) as orderedSet 
return distinct(orderedSet) 
+0

心配しないで解決してください:) –

+0

良い解決策のように見えます!この問題を解決するには、ソリューションをコピーして答えに貼り付けて受け入れることができますか?そのようにして、あなたの質問が他の人に関連する質問として現れた場合、質問に答えられたことが明確に示されます。それだけで放置されていると、右の関連する質問のリストのように、それにリンクされていると答えられていない未回答の質問のように見えます。 – InverseFalcon

+0

確かに:)回答を投稿 –

答えて

0

https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases

トラバーサルAPIへのアクセスを得るために、他の誰かがそれを必要とする場合は、このクエリを使用して問題を解決するためにそれを使用:

MATCH (cs:SomeLabel)-[:LINKED]->(:SomeLabel) 
where NOT (cs)<-[:LINKED]-(:SomeLabel) 
CALL apoc.path.expandConfig(cs,  {relationshipFilter:"LINKED",uniqueness:"NODE_GLOBAL",bfs:false}) YIELD path 
WITH cs.Lineage as source, path 
unwind extract(x in nodes(path) | x.Lineage) as node 
with source, collect(distinct(node)) as set 
unwind set as setMember 
with source,setMember 
order by setMember 
with source,collect(setMember) as orderedSet 
return distinct(orderedSet) 
関連する問題