2013-11-27 64 views
0

我想用neo4j在有向無環圖中搜索最短路徑。我有圖,看起來與此類似: enter image description hereA *在neo4j中搜索

我想找到路徑從Root開始到Layer 3。在每一層我有不同的屬性集,我可以使用這個屬性和用戶輸入來計算重量。我需要使用A *或其他搜索算法(可能有幾條具有相同權重的路徑),以最小的動態權重查找所有最短路徑。 neo4j和cypher或gremlin可以嗎?

我不想使用嵌入式版本,因爲我的項目是用python編寫的,所以我不能使用java庫,因爲我知道可以這樣做。

+0

如果它是一個DAG,在任何2個節點之間最多隻有一條路徑嗎? A *看起來像是矯枉過正,但實施起來了;一個簡單的DFS(切斷所需水平)將完成這項工作。 –

+0

gremlin或(更好)cypher可能嗎? – Lazin

+0

我發現這個 - http://docs.neo4j.org/chunked/snapshot/query-match.html#_shortest_path它看起來像我的問題的答案。 – Lazin

回答

0

截至目前,Cypher不允許您通過例如你的成本函數。添加這個功能必須非常小心,因爲通過查詢語言注入可運行代碼有一些安全問題。

這就是你現在可以做的事情:創建一個unmanaged extension到Neo4j服務器。在您的非託管擴展中,您可以使用提供的graph algorithms。使用JAX-RS參數,您可以提供數據來識別遍歷的開始和結束節點,並讓圖算法完成骯髒的工作。

您可能想看看https://github.com/sarmbruster/unmanaged-extension-archetype,這是一個使用gradle作爲構建系統的簡約示例項目。

然而,草圖的想法涉及服務器端部分的Java編碼。客戶端可以使用任何你喜歡的堆棧。

+0

費用表達式並不危險。 :) –