【问题标题】:Neo4j 2.2.5 - Dijkstra shortest pathNeo4j 2.2.5 - Dijkstra 最短路径
【发布时间】:2016-03-01 19:07:39
【问题描述】:

我正在使用带有 Spring Data 的 Neo4J 2.2.5,我想使用 Dijkstra 计算 2 个节点之间的最短路径。

这是我的代码:

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);

提前感谢您帮助我!

亲切的问候, 约翰,

【问题讨论】:

    标签: neo4j spring-data-neo4j-4 neo4j-ogm


    【解决方案1】:

    由于您的密码查询 MATCH n WHERE id(n) = {id} RETURN n 返回单个节点,您可以使用

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

    这将直接返回您的实体。 SDN/OGM 不会从查询中返回原始节点或关系。

    我不确定您所说的“我如何获得 startVertexNode 和 goalVertexNode 参数”是什么意思

    【讨论】:

    • findSinglePath方法的参数类型是org.neo4j.graphdb.Node。问题是如何使用 SDN 从 ID 获取这些对象?
    • 除非您使用带有嵌入式驱动程序的 SDN 4.1,否则无法从图中获取节点。如果您确实使用嵌入式驱动程序,那么您可以使用嵌入式 API 通过 id 获取开始和结束顶点。但是会话/查询无济于事,因为您得到的只是域实体,而不是节点。
    猜你喜欢
    • 2014-08-07
    • 1970-01-01
    • 2021-10-29
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多