2015-04-05 43 views
2

我是Neo4J的全新新手,3天沒有,我一直在試圖弄清楚,如何獲得2間房間之間的路徑。如何根據關係屬性查找路徑?

功能allShortestPaths()得到我的結果是這樣http://www.directupload.net/file/d/3948/79bvpbzd_jpg.htm 或類似這樣的http://www.directupload.net/file/d/3948/56j6plhh_jpg.htm
對不起,我的名譽不允許我到包括圖片直接)。

該函數可以直接使用,但使用所有類型的關係從頭到尾遍歷。但是,如果我只想得到與某個財產的關係的路徑呢?

的路徑可能會是這樣的:(start:Room {name: "x"})-[*]-("another node")-[*]-("other node)-[:CONNECTED_TO {state: "free}]-("another node")-[*]-(end:Room {name: "y"}

我所知道的關於希望的路徑是:

  • 開始節點
  • 端節點
  • 財產和地方關係的標籤路徑中

我不知道什麼不重要的是:

  • 多久路徑是
  • 什麼其他關係的道路上

下一步將是通過屬性來指定我正在尋找更準確的路徑,例如該路徑中的節點。
即找到(A) to (H), where (C {type: "SC"})-[:CONNECTED_TO {state: "free"}]-(D {type: "SC"})

的路徑我讀了很多的東西知道對不對,上前一百萬個不同cyphers,但我閱讀,我嘗試的越多,我越感到困惑就越多。任何人都可以給我一個提示嗎?

預先感謝您

Ichnafi

回答

3

我所知道的關於希望的路徑是:

  • 開始節點
  • 端節點
  • 財產和地方關係的標籤在路徑內

你在找什麼是任何謂詞,它測試謂詞是否適用於集合中的至少一個元素。在你的情況下,集合是路徑中的所有關係

一個簡單的查詢是:

MATCH (start:Room {name:'x'}), (end:Room {name:'y'}) 
MATCH p=allShortestPaths((start)-[*]-(end)) 
WHERE ANY(
     x IN rels(p) WHERE type(x) = 'RELATIONSHIP_TYPE' 
        AND x.prop = propValue) 
RETURN distinct(p) 

更多的文檔中:http://neo4j.com/docs/stable/query-predicates.html#functions-single

+0

太謝謝你了。不僅如此,密碼工作像一個魅力,我也認爲我已經理解了它。 – Ichnafi 2015-04-06 11:26:14