2016-03-01 203 views
0

我使用的是Spring Data的Neo4J 2.2.5,我想使用Dijkstra來計算2個節點之間的最短路徑。Neo4j 2.2.5 - Dijkstra最短路徑

這是我的代碼:

PathFinder<WeightedPath> finder = GraphAlgoFactory 
       .dijkstra(PathExpanders.forTypeAndDirection(RelationshipTypes.SEM_SIM, Direction.BOTH), 
         Constants.ADVERTISED_COST); 
     WeightedPath path = finder.findSinglePath(startVertexNode, goalVertexNode); 

我怎樣才能獲得startVertexNode和goalVertexNode參數?使用下面的密碼方法可以獲得正確的數據,但是如何將結果轉換爲節點?

Map<String, Object> params = new HashMap<String, Object>(); 
     params.put("id", 0); 
     String query = "MATCH n WHERE id(n) = {id} RETURN n"; 

     org.neo4j.ogm.session.result.Result result = this.neo4jOperations.query(query, params); 

在此先感謝幫助我!

親切的問候, 約翰,

回答

0

由於MATCH n WHERE id(n) = {id} RETURN n返回單個節點的暗號查詢,您可以使用

neo4jOperations.queryForObject(Class<T> entityType, String cypherQuery, Map<String, ?> parameters) 

這將直接返回你的實體。 SDN/OGM不會爲您提供查詢中的原始節點或關係。

我不知道你所說的「我怎樣才能獲得startVertexNode和goalVertexNode參數」

+0

的findSinglePath方法的參數類型是org.neo4j.graphdb.Node的意思。問題是我如何使用SDN從一個ID開始獲取這些對象? –

+0

除非您將SDN 4.1與嵌入式驅動程序一起使用,否則無法從圖形中獲取節點。如果您確實使用嵌入式驅動程序,那麼您可以使用嵌入式API通過id來獲取起始和結束頂點。但是會話/查詢不會有幫助,因爲所有返回的都是一個域實體,而不是一個節點。 – Luanne