したがって、私はリレーショナルデータベースからNeo4jグラフデータベースを作成しました。グラフデータベースには、約700万のノードと、ノード間の約900万の関係があります。大きなneo4jグラフで未接続ノードを高速検索
ここで、特定のラベルを持つノードに接続されていないノードをすべて検索したいと思います(接続されていないノードと呼ぶ)。たとえば、 "Customer"と "Order"というラベルの付いたノードがあります(これを最上位ノードと呼ぶ)。私は、これらの最上位ノードとの間に関係のないすべてのノードを見つけたいと思っています。この関係は直接的である必要はなく、ノードは他のノードを介してトップレベルノードに接続することができる。
私はこの問題を解決するCYPHERクエリを持っています。
MATCH (a) WHERE not ((a)-[*]-(:Customer)) AND not ((a)-[*]-(:Order)) RETURN a;
あなたが想像できるように、クエリの実行には長い時間が必要になり、パフォーマンスが悪いです。ほとんどの場合、無向の関係のために、関係がいくつあるかによって問題にならないためです。しかし、関係の方向は重要ではありません。どのノードからトップレベルノードのいずれかへのパスがないことを確認する必要があります。
未接続ノードをより早く見つける方法はありますか?データベースは本当に大きく、トップレベルノードをマークする2つ以上のラベルがあることに注意してください。
私はこれは素晴らしい解決策だと思います、ありがとうございました。私は、トップレベルのノードに接続されているすべてのノードを削除し、グラフ内の未接続ノードだけを残して同様のアプローチを試したかったのです。あなたのアプローチははるかに良いです。 また、APOC手順に言及してくれてありがとう、私はそれがCypherを介してバッチで操作を実行することが可能であることを知らなかった。 構文修正のおかげで、私はそれを編集します。 私はこのアプローチを試して、完了したらフィードバックを与えます。 –