2017-08-02 126 views
1

我有以下圖表查找一個節點使用的Neo4j和/或Python在路徑的步驟(深度)

graph

每個這些關係是「USES_COMPONENT

規格化的Neo4j暗號後結果,我有一個結構像

{ 
    '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 

我需要做的是找到了多少步從根(穀物圈早餐麥片),每一個組件都是路程。

所以Corn Flour Blend將是1一步之遙,而Whole Grain Yellow Corn Flour2步驟。

我對cypher實現或python實現感到滿意。或者,兩者的結合。

一些注意事項:

  1. 我在圖形數據的完全控制,並且它的方式是標準化的(上圖)。我想盡可能地保持這一點,但我可以調整它
  2. 性能很重要,但這些圖都不會很大。我會感到驚訝,如果(總)的任何產品有200多個組件(在任何深度)
  3. 我很高興能有第三方庫,如果任何人一個
  4. 我只是擔心USES_COMPONENT關係的人都知道,那永遠不會是循環的。無論你走多遠你遵循USES_COMPONENT路徑,它永遠不會打Froot循環。

我很感謝大家的幫助。我甚至不完全確定要谷歌什麼,所以如果我錯過了一些明顯的東西,鏈接將不勝感激。

+0

您需要整個路徑還是與根距離足夠的節點? –

+0

距離的節點應該沒問題。我只需要弄清楚「全麥黃玉米粉」距離酒店僅有2步之遙。 – Apollo

回答

1

由於具有從根的距離的節點就足夠你在the comments說,這個查詢應該工作:

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

此查詢使用size()函數來獲取pr之間的r關係的數量(根)和每個節點。

+0

這很完美。對於任何想要知道的人,如果你想要路徑,也可以'返回n,size(r),p'。這條道路對我的情況並不重要,但我玩弄了它。 – Apollo

相關問題