4

Neo4j グラフ データベースには、約 50,000 のノードと 50,000 を超える関係が保持されます。ほとんどのノードを含むメイン グラフがあります。しかし、(まだ) メイン グラフに接続されていないグラフがいくつかあります。

さまざまなグラフを接続して 1 つの大きなメイン グラフを形成するために、Cypher クエリを使用して、接続されたノードのパスまたはコレクションをサイズ順に並べて一覧表示します (最大の切断されたグラフが最初)。

次のようなスタックオーバーフローに関するいくつかの投稿があります。

問題を表す小さなサンプル グラフを次に示します。 Neo4j コンソールのサンプル グラフ

次の Cypher クエリは問題を解決しませんが、出発点です。メイン グラフに接続されていないすべてのノードが一覧表示されます。これらのノードをノードのコレクションに結合することができません。小さなグラフで動作します。大きなグラフでは、「未定義」のみが返されます... 10分以上実行した後。

START s=node(3), n=node(*) 
MATCH s-[*1..10]-m 
WITH collect(m) as members, n 
WHERE NOT n in members 
RETURN DISTINCT id(n), n.name? 
ORDER BY id(n) 
LIMIT 10;

Cypher を使用してすべての切断された (サブ) グラフを一覧表示する方法は?

環境: - Neo4j - グラフ データベース カーネル 1.9.M05 - Java - SE ランタイム環境 (ビルド 1.7.0_17-b02)

4

1 に答える 1

3

これは完全な答えではありませんが、(可能であれば)このユース ケースではTraversal Frameworkをフォールバックする必要があると思います。

Cypher は、グラフの特定の部分を一致させることを目的としています。トラバーサル フレームワークは、グラフをどのようにトラバースするかに関するものです。

あなたの場合、トラバーサルは、一致するグラフよりも重要です。これが私が提案するものです。トラバーサルフレームワークを使用して

  1. 希望する方法でノードのグループにラベルを付ける
  2. あなたがそれをしている間に、結果をマップ(またはより進化したもの)に集約します
于 2013-04-28T17:42:33.890 に答える