Я предполагаю, что у меня есть ошибка в моем коде, но я не могу найти, у кого есть три узла: a, b и c связаны так (a) - [r1] → (b) <- [r2] - (c) (я на 100% уверен в этом, я проверил с сообществом neo4j)
Но моя программа может найти только первую и последнюю. Второй, b, всегда игнорируется. Вот мой метод:
static List<Node> getNodes(Node startNode,final Node endNode,boolean uniqueResult,List<RelationshipType> relationshipTypes)
{
List<Node> result=new ArrayList<>();
try(Transaction tx=getInstance()._graph.beginTx())
{
TraversalDescription td = getInstance()._graph.traversalDescription().breadthFirst();
for(RelationshipType relationshipType:relationshipTypes)
td=td.relationships(relationshipType);
td=td.evaluator(Evaluators.excludeStartPosition());
if(!uniqueResult)
td=td.uniqueness(Uniqueness.NODE_PATH);
td=td.evaluator(new Evaluator() {
@Override
public Evaluation evaluate(Path path) {
boolean isEndNode=path.endNode().equals(endNode);
return Evaluation.of(isEndNode, !isEndNode);
}
});
Traverser tr=td.traverse( startNode );
for(Path path:tr)
result.add(path.endNode());
tx.success();
}
return result;
}
startNode - это endNode, c уникальныйResult является истинным (но я пытался с ложным, без изменений) отношенияShipTypes содержит r1 и r2.
Я понятия не имею, почему это не работает. Спасибо за вашу помощь.
Путь - это набор узлов-узлов-узлов.
С
См. Также: http://docs.neo4j.org/chunked/stable/tutorial-traversal-java-api.html#_path