2016-03-01 222 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