0

2 つの同一の neo4j DB スキーマで次の暗号クエリを実行しています。

START dave = node(7)
// dave's friend who lives and attends an event in the same city
MATCH dave-[:FRIEND]-friend-[:LIVES]->city-[:HOSTS]->event<-[:ATTENDS]-friend
RETURN dave.name, friend.name, city.name, event.name;

ローカル サーバーの DB スキーマで上記のクエリを実行すると、正しい結果 (単一のパス) が得られます。

+----------------------------------------------------+ 
| dave.name | friend.name | city.name | event.name   |  
+----------------------------------------------------+ 
| "dave"    | "adam"      | "london"  | "exhibition" | 
+----------------------------------------------------+

実際、4 人のノード (4、5、6、7) のそれぞれについて、adam=node(4) は、同じ都市に住んでイベントに参加する唯一の人物です。

ただし、ここで同じクエリを実行すると(ローカル サーバーとまったく同じ DB スキーマで)、次の誤った結果が得られます。

+----------------------------------------------------+ 
| dave.name | friend.name | city.name | event.name   |  
+----------------------------------------------------+ 
| "dave"    | "adam"      | "london"  | "exhibition" | 
| "dave"    | "adam"      | "london"  | "exhibition" | 
| "dave"    | "bill"      | "paris"   | "seminar"    | // bill doesn't attend seminar
+----------------------------------------------------+

dave=node(7) 以外の場合、ここでの結果も正しくありません (存在しない余分なパス)。

4

1 に答える 1

0

一致フェーズを2つに分割してみてください。1つの一致パターンで1つのパラメーター名を2回使用したことはありません。

それ外

MATCH dave-[:FRIEND]-friend-[:LIVES]->city-[:HOSTS]->event<-[:ATTENDS]-friend

使用する

MATCH dave-[:FRIEND]-friend-[:LIVES]->city-[:HOSTS]->event, event<-[:ATTENDS]-friend
于 2012-11-29T14:28:07.237 に答える