0

これは 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 を使用してこれを行う正しい方法は何でしょうか?

4

1 に答える 1

0

クエリにタイプミスがありました。PART_OFする必要がありますBELONGS_TO。これはあなたのために働くはずです:

MATCH (newEmail:Email {value:'john@gmail.com'})-[:BELONGS_TO]->(p7)-[*]-(badPerson)<-[:BELONGS_TO]-(badFeature {badFlag:'true'})
RETURN badPerson, badFeature;

余談: すべてのプロパティに文字列値を使用しているようです。true文字列値「true」と「false」をブール値とに置き換えますfalse。同様に、常に数値である値は、整数または浮動小数点値のみを使用する必要があります。

于 2015-12-24T06:37:20.480 に答える