2017-08-02 12 views
1

を使用してノードのパスにおけるステップ(深さ)を検索し、私は次のグラフのNeo4jおよび/またはPythonの

graph

は、それらの関係は、それぞれのNeo4j CYPHERを正規化した後、「USES_COMPONENT

あるていますその結果、私は最終的に生CYPHERに非常によく似た、グラフ全体を(説明

{ 
    '1': { 
     'label': 'Product', 
     'properties': {...}, 
     'type': 'VERTEX' 
    }, 
    '2': { 
     'label': 'Component', 
     'properties': {...}, 
     'type': 'VERTEX' 
    }, 
    '3': { 
     'label': 'USES_COMPONENT', 
     'properties': {...}, 
     'type': 'EDGE', 
     'direction': 'OUT', 
     'from': '1', 
     'to': '2' 
    } 
} 

のような構造を持っています応答)

現在のサイファークエリは次のとおりです。(Froot Loopsのuuidはa1です。私はこれを割り当てた。)

MATCH p = (pr:Product)-[:USES_COMPONENT*]->() 
WHERE pr.meta_uuid = 'a1' 
RETURN p 

私がする必要がどのような各コンポーネントがある何歩ルート(Frootループ)から見つけることです。

従ってCorn Flour Blendは、が2ステップ離れている間に、1になります。

サイファーの実装またはPythonの実装に満足しています。または、2つの組み合わせ。

いくつかの注意:

  1. 私は完全なグラフデータの制御、およびそれが(上記の)正規化された方法でいます。できるだけこれに近い状態にしておきたいですが、私はです。調整する
  2. パフォーマンスは重要ですが、これらのグラフはどれも大したものではありません。 (合計)いずれかの製品は、誰もが私はUSES_COMPONENT関係についてだけ心配しています1
  3. を知っているならば、私は、サードパーティのライブラリが含まれて幸せ
  4. (任意の深さで)200の以上のコンポーネントを持っていた場合、私は、驚くだろうそれは決して円形ではありません。 の場合、USES_COMPONENTのパスをたどっても、Froot Loopsには決して行きません。

皆様のご協力に感謝いたします。私は完全に何をgoogleにしていないので、もし私が何か明白なことを見逃してしまったら、リンクが評価されるだろう。ルートからの距離を持つノード以来

+0

ルート全体かルートからの距離が十分なノードが必要ですか? –

+0

距離のあるノードは問題ありません。私はちょうど "全粒黄色のトウモロコシの粉"は2つのステップであることを理解する必要があります。 – Apollo

答えて

1

はあなたがthe commentsに言ったように、このクエリは動作するはずで十分です。

MATCH p = (pr:Product)-[r:USES_COMPONENT*]->(n) 
WHERE pr.meta_uuid = 'a1' 
RETURN n, size(r) 

このクエリはprr関係の数を取得するにはsize()機能を使用しています(ルート)および各nノード。

+0

それは完璧です。知りたがっている人にとっては、パスも必要であれば、 'RETURN n、size(r)、p'もできます。パスは私の場合は重要ではありませんでしたが、私はそれと一緒に遊んだ。 – Apollo

関連する問題