2016-09-09 10 views
0

Я использую API траверса, но кажется, что Traversal.expanderForTypes() устарел, и я не знаю, как найти кратчайший путь между двумя узлами.API-интерфейс обхода Neo4j 3.1, как найти кратчайший путь между двумя узлами?

Мой метод

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

Так отношения имеют свойство расстояния со значением.

Как использовать API обхода от neo4j 3? Кажется, многое изменилось.

+0

только для уточнения: вы действительно говорите о Neo4j 3.1 - это не ГА и веха 8 отсутствует. Или вы имеете в виду Neo4j 3.0.x - это GA. –

+0

да, это примерно 3.0.x –

ответ

1

Вы найдете несколько предопределенных вариантов в PathExpanders.

Есть ли конкретная причина, почему вы моделируете DISTANCE_TO дважды для заданных узлов a и b? В большинстве случаев предпочтительнее иметь только одно отношение и игнорировать направление во время обхода. В этом случае вы можете использовать

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