Toreの答え(可変関係の上限を含む)は、2つのノードが接続されているかどうか、それらを接続するパスに特定の関係が存在するかどうかを調べるのに最適です。
これまでに説明したソリューションのほとんどの弱点は、変数のリレーションシップに制限がないということです。つまり、クエリは、可能性のあるすべてのパスを照合しようとするグラフ全体をクロールすることになりますそのようなパスが存在し、その後停止します。これはおそらくヒープスペースエラーの原因です。
Toreの提案では、2つのノードが接続されていない場合でもグラフ全体をクロールする必要がないため、マッチで可変長関係に上限を追加することをお勧めします。どの場合でも、上限ではヒープが爆発するのを防ぐ必要があります。
ここにいくつかの可能性があります。私は関係の上限を離れていますが、必要に応じて簡単に追加できます。
// this one won't check for the particular relationship type in the path
// but doesn't need to match on all possible paths, just find connectedness
MATCH (n:WCD_Ent { WCD_NAME: "A" }), (m:WCD_Ent { WCD_NAME: "B" })
RETURN EXISTS((n)-[*]-(m))
// using shortestPath() will only give you a single path back that works
// however WHERE ANY may be a filter to apply after matches are found
// so this may still blow up, not sure
MATCH (n:WCD_Ent { WCD_NAME: "A" }), (m:WCD_Ent { WCD_NAME: "B" })
RETURN shortestPath((n)-[r*]-(m))
WHERE ANY(rel IN r WHERE TYPE(rel) = 'NAME_MATCH')
// Adding LIMIT 1 will only return one path result
// Unsure if this will prevent the heap from blowing up though
// The performance and outcome may be identical to the above query
MATCH (n:WCD_Ent { WCD_NAME: "A" }), (m:WCD_Ent { WCD_NAME: "B" })
MATCH (n)-[r*]-(m)
WHERE ANY(rel IN r WHERE TYPE(rel) = 'NAME_MATCH')
RETURN n, r, m
LIMIT 1
こんにちは、私はこのエラーが発生します。あなたは私に同じことを助けてくれますか? タイプの不一致:期待された関係ですが、コレクション<関係>(行2、列31(オフセット:140)) 「どこにもありません(TYPE(r)= 'NAME_MATCH')」) "Type(r)"の – Sharath
のrは、 'TYPE'呼び出しの' r'ではなく 'rel'でなければなりません。 (上に固定)今日は何も入力できません:)申し訳ありません:) –
上記のクエリを実行すると、Javaヒープスペースエラーが発生します。( – Sharath