我正在使用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?似乎发生了很多变化。
答案 0 :(得分:1)
您会在PathExpanders
中找到几个预定义的PathExpander
实施。
为给定节点a和b两次建模DISTANCE_TO
的具体原因是什么?在大多数情况下,最好只有一个关系,并在遍历期间忽略方向。在这种情况下,您可以使用
PathExpander expander = PathExpanders.forType(NodesRelationship.DISTANCE_TO);