2017-11-10 4 views
1

私のスキーマと同じように、私は "プロジェクト"ノードと複数の "リビジョン"ノードをプロジェクトに接続しています。他のすべてのノードは、該当する「リビジョン」ノードに接続されます。私は、特定の "リビジョン"ノードに接続されているすべてのノードを取得する必要があります。ノードをフェッチする際には、これらのノード間の関係も取得する必要があります。特定のリビジョンに接続されているノードを制限する必要があります。Neo4j:パス内のノード間のリレーションシップ

私は以下のクエリを試しましたが、プロファイリング中にDBヒットが多くなるため、パフォーマンスが低下します。すべてのリビジョンに約28kのノードと76kの関係があります。

以下のクエリは費用効果が高い。ブラウザ内のデータベースにクエリを実行している間に期待通りの結果が得られます。しかし、私のJavaアプリケーションから実行している間に、特定のノードに接続されているノード間の関係「 」はフェッチされません。

PROFILE 
MATCH (project:Project {name> :"test_local"})-[:HAS_REVISION]- 
(revision:Revision{revisionNo:1}) 
WITH project,revision 
MATCH p = (revision)-[]-(allRelatedNodes) 
WITH project,revision,collect(p) as rs 
RETURN project,revision,rs 

誰でも助けてください。

+0

Javaコードを共有してください。 –

+0

最初のサイファークエリは、 'with'節に欠けているものがあるため、必要以上に多くの作業をしているようです。もう1つは正常に動作します。 Javaのスニペットと何を得るべきかについてのより具体的な記述を投稿してください。あなたは、特定の "Revision"に接続されたノード間の関係を望んでいるとしますが、クエリの出力でパスを収集しています。したがって、これらの関係のパスをどのように処理しているかに問題が生じる可能性があります。 – FrobberOfBits

答えて

0

私はこれをapoc.path.subgraphAllプロシージャを使用して解決しました。私の要件は、 "私はすべてのノードをリビジョンに接続し、リビジョンノードに接続されているノード間の関係も取得する必要がある"ということでした。 2番目のクエリはneo4jブラウザでは望みの結果を返しましたが、関係するノードはjavaのneo4jエンティティでマッピングされていませんでした。最後にこれは私がしたことです。 match (project:Project {name :{0}})-[:HAS_REVISION]- " + "(revision:Revision{revisionNo:{1}}) " + "call apoc.path.subgraphAll(revision,{maxLevel:1}) yield nodes,relationships " + "return nodes,relationships;
手動でapo jarをneo4jのpluginsフォルダにコピーしました。みなさん、ありがとうございます。

関連する問題