Neo4j 3.1遍历API,如何找到两个节点之间的最短路径?

时间:2016-09-09 13:50:27

标签: java neo4j traversal spring-data-neo4j

我正在使用Traversal API,但似乎不推荐使用Traversal.expanderForTypes(),我不知道如何在两个节点之间找到最短路径。

我的方法

 public Iterable<Path> shortestPath(long firstNodeId, long secondNodeId) {
        Node firstNode = null;
        Node secondNode = null;
        try (Transaction tx = mainServiceBean.getDatabaseService().beginTx()) {
            firstNode = mainServiceBean.getDatabaseService().getNodeById(firstNodeId);
            secondNode = mainServiceBean.getDatabaseService().getNodeById(secondNodeId);
            PathExpander expander = Traversal.expanderForTypes();//?
            PathFinder<Path> shortestPath = GraphAlgoFactory.shortestPath(expander, 4, 4);
            tx.success();
            return shortestPath.findAllPaths(firstNode, secondNode);
        }
    }

我的节点是城市和这样的关系

 Node nodeACity = mainServiceBean.getDatabaseService().createNode(ProjectLabels.City);

            nodeACity .setProperty(City.NAME, CityNames.ACiTY.name());

            Node nodeBCity = mainServiceBean.getDatabaseService().createNode(ProjectLabels.City);
            nodeBCity.setProperty(City.NAME, CityNames.BCity.name());


 Relationship ab= nodeACity .createRelationshipTo(nodeBCity , NodesRelationship.DISTANCE_TO);
            ab.setProperty("distance", 124.31);

            Relationship ba= nodeBCity .createRelationshipTo(nodeACity , NodesRelationship.DISTANCE_TO);
            ba.setProperty("distance", 124.31);

所以关系的属性距离与价值有关。

如何使用neo4j 3的遍历API?似乎发生了很多变化。

1 个答案:

答案 0 :(得分:1)

您会在PathExpanders中找到几个预定义的PathExpander实施。

为给定节点a和b两次建模DISTANCE_TO的具体原因是什么?在大多数情况下,最好只有一个关系,并在遍历期间忽略方向。在这种情况下,您可以使用

PathExpander expander = PathExpanders.forType(NodesRelationship.DISTANCE_TO);