これは Neo4j での私の最初の試みです。非常に些細なことを見逃している場合はご容赦ください。これが私の問題です:
次の Neo4j コンソールの例で作成されたグラフを検討してください: http://console.neo4j.org/?id=y13kbv
この例では、次のノードがあります。
(人 {memberId、memberName、membershipDate})
(電子メール {値, badFlag})
(AccountNumber {値, badFlag})
creditCard、billAddress、shipAddress など、Person に関連する機能をキャプチャするノードが増える可能性があります。これらのノードはすべて、Email および AccountNumber ノードと同じになります: (creditCard {value, badFlag})、(billAddress {value, badFlag })、等。
Neo4j コンソールの例に見られるようにグラフにデータが入力された状態で、次のようにグラフにもう 1 人人物を追加するとします。
(p7:Person {memberId:'18' , memberName:'John', membershipDate:'12/2/2015'}),
(email6:Email {value: 'john@gmail.com', badFlag:'false'}),
(a2)-[b13:BELONGS_TO]->(p7),
(email6)-[b14:BELONGS_TO]->(p7)
この新しい人物をシステムに追加する場合、新しい人物の機能 (「email6」および「a2」ノード) からシステム内の他のノードへのパスが存在するかどうかを確認する必要があります。 badFlag=true"、この場合はノード (a1 {値:1234, badFlag:true})。
ここで、結果のパスは次のようになります(email6)-[BELONGS_TO]->(p7)<-[BELONGS_TO]-(a2)-[BELONGS_TO]->(p6)<-[BELONGS_TO]-(email5)-[BELONGS_TO]->(p5)<-[BELONGS_TO]-(a1:{badFlag:true})
私はこのようなことを試しました:
MATCH (newEmail:Email{value:'john@gmail.com'})-[:BELONGS_TO]->(p7)-[*]-(badPerson)<-[:BELONGS_TO]-(badFeature{badFlag:'true'}) RETURN badPerson, badFeature;
チェーンが 1 レベルしかない場合は機能するようですが、Neo4j コンソールの例のようにパスが長くなる可能性がある場合は機能しません。
この問題の解決に役立つ Cypher クエリのヘルプが必要です。最終的には、アプリケーションを使用して Neo4j の Java API を使用してこの操作を行う予定です。Java API を使用してこれを行う正しい方法は何でしょうか?