2017-05-08 12 views
0

我得到了一個具有循環類型關係的圖。所以在我的圖中每個節點之間可能有兩個不同的方向關係(傳出和傳入)。我試圖在不使用shortestpath()的情況下找到兩個節點之間的路徑。如何給條件設置只有1個關係會顯示路徑中的每個節點之間?這裏是我的查詢:Cypher設置條件只有一個關係可以顯示路徑中每個節點的條件

Match p = (A)-[r*]-(b) return p 

我應該寫哪些部分?

+0

首先,如果你不使用最短路徑(),你需要你的封頂[R *]使查詢不拉起無限的路徑。你也試圖找到所有使用每條邊的路徑只有一次? – Tezra

+0

我正試圖找到兩個節點之間的最短距離。我在我的關係類型GO_TO中有距離屬性。我認爲它應該只有一次,但不是所有的邊緣。例如,我有兩個節點A,B和I之間也有兩個關係GO_TO A,B(傳入和傳出)我只希望傳出方向顯示在我的路徑中。所以當我查詢A-F之間的路徑。它應該只顯示** A-> B-> C-> D-> E-> F ** @Tezra –

回答

0

所以喲真正想要的是最短的加權路徑。 Cypher支架不直接支持這個,但你可以查詢它像這樣

MATCH (start:Point {id: '1'}), (end:Point {id: '2'}) 
MATCH p=(start)-[:GO_TO*1..25]->(end) 
WITH p,reduce(s = 0, r IN rels(p) | s + r.myValueProp) AS dist 
RETURN p, dist ORDER BY dist DESC LIMIT 1 
+0

謝謝,這是得到我的答案的正確方法。但是當我有巨大的關係和節點。它會有巨大的結果,這將使我的查詢進入無限循環。所以我想將關係方向設置爲一個方向@Terze –

+0

@LinBernie這也是爲什麼我將節點數量限制到25個在路徑中使用。上限越低,表現越好,但它也可能錯過一些更好的路徑。 – Tezra

相關問題