2017-06-19 9 views
0

大きなグラフで以下のようにクエリを実行するために何かができるかどうかを調べる。私は2つのノード間の最短経路を見つけようとしていますが、特定の他の種類のノードを含む経路は除外しています。問題はWHERE句のようです。以下のクエリは、完全に停止して終了します。neo4jラベルの制約付き最短パス

MATCH p=shortestPath((p1:Party{suprRC:"21"})-[*..15]-(p2:Party{suprRC:"21"})) 
WITH p 
WHERE NONE(n in nodes(p) where labels(n) in [["Reporter"],["FirstName"],["LastName"]]) 
RETURN p limit 500; 
+0

を使用する必要があります。 –

+0

提案のおかげでトム - 私はそれが助けていないのは恐れている。 –

+0

質問のカップル... 1)開始ノードと終了ノードは同じですか? suprRCは党にとってユニークな財産ですか?もしそうでなければ、パーティーノードはsuprRC上で索引付けされていますか? MATCH(RETURNとLIMITを指定し、WITHとWHEREを指定しないで)を実行すると... performantですか?このクエリのEXPLAINの出力を共有できますか? –

答えて

0

比較が間違っているが、labels(n)ラベルのコレクションを返します、あなたは、単一のString要素のコレクションに対してコレクションを一致します。

トムで述べたように、あなたはWITHをオフに残すことができますしかし、あなたは(つまりPアウトと一緒に出国)MATCHに直接WHEREを試してみてください2つのNONE述語

MATCH p=shortestPath((p1:Party{suprRC:"21"})-[*..15]-(p2:Party{suprRC:"21"})) 
WHERE NONE(x IN nodes(p) 
      WHERE NONE(l IN ['Reporter','LastName', 'FirstName'] 
         WHERE l IN labels(x) 
        ) 
     ) 
RETURN p limit 500; 
+0

Christopheの提案に感謝します。私はなぜ私がした特定のイディオムを使用したのか思い出さない - それは動作する(小さいグラフ/クエリとにかく)。私はあなたが提案したものを試しましたが、それはうまくいったのですが、依然として遅すぎます(クエリが終了するのに30分)。ああ。 –

関連する問題