Neo4jを使用して、特定のノード "a"に接続されていないノードを見つけようとしています。これまで私が持っていたクエリは:Neo4j Cypherは2つのディスジョイントノードを見つける
MATCH p = shortestPath((a:Node {id:"123"})-[*]-(b:Node))
WHERE p IS NULL
RETURN b.id as b
したがって、aとbの間の最短経路を見つけようとします。パスが見つからない場合は、そのノードのIDを返します。しかし、これにより、クエリが数分実行され、メモリ不足のときにクラッシュします。私はこの方法がうまくいくかどうか、もっと効率的な方法があれば疑問に思っていましたか?どんな助けでも大歓迎です!
編集:
MATCH (a:Node {id:"123"})-[*]-(b:Node),
(c:Node)
WITH collect(b) as col, a, b, c
WHERE a <> b AND NOT c IN col
RETURN c.id
だから、COL(コレクト(b)参照)cは、その後、Cが接続されていないCOLにないのであれば、に接続されているすべてのノードが含まれていますか?
ありがとうございます。私はAPOC手順を使用することはできません。これは代替品として見えますか? (編集を参照) – ThatOneGuy
代替クエリを修正する必要があるクエリで私の回答を編集しました。 Cypherは一意のパスに関心があるので、Cypherの可変長一致はAPOCのsubgraphNodes()プロシージャほど効率的ではないため、このクエリは大きなグラフでもタイムアウトする可能性があります。 – InverseFalcon