2017-12-04 8 views
2

次のグラフで、条件として緑色のノード「認定」と「ニューヨーク」を使用して、ルール1とルール2の両方にどのように一致させることができますか?サイファークエリで複数の可変長パスを使用できないのはなぜですか?

次サイファーのクエリが動作しない理由を私は理解して助け:

MATCH 
(r:Rule), 
(r)-[w1:When*]->(c:State{instanceName:"New York"}), 
(r)-[w2:When*]->(c2:Service{instanceName:"Qualification"}) 
RETURN * LIMIT 50 

このクエリは、1

これらのクエリのそれぞれが個別に動作し、期待される結果を返すルールはない、唯一の2ルール返します

MATCH 
(r:Rule), 
(r)-[w2:When*]->(c2:Service{instanceName:"Qualification"}) 
RETURN * LIMIT 50 

MATCH 
(r:Rule), 
(r)-[w1:When*]->(c:State{instanceName:"New York"}) 
RETURN * LIMIT 50 

Sample graph

答えて

1

MATCH句内の関係のuniquenessのため、クエリはルール1を返しません。あなたの例では、Whenの関係はRule 1Instanceの両方のパスで同じで、そのうちの1つだけが返されます。

これを回避するには、2つの別々のMATCH句を使用します。

MATCH 
    (r:Rule), 
    (r)-[w1:When*]->(c:State {instanceName: "New York"}), 
MATCH 
    (r)-[w2:When*]->(c2:Service {instanceName: "Qualification"}) 
RETURN * 
LIMIT 50 
0

別個のパターンを有するようなSomtehing:

MATCH (r:Rule) 
MATCH (r)-[w1:When*]->(c:State{instanceName:"New York"}) 
MATCH (r)-[w2:When*]->(c2:Service{instanceName:"Qualification"}) 
RETURN * LIMIT 50 
関連する問題