neo4j: Traverser получает только первый и последний узел

1

Я предполагаю, что у меня есть ошибка в моем коде, но я не могу найти, у кого есть три узла: 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.

Я понятия не имею, почему это не работает. Спасибо за вашу помощь.

  • 0
    Вы ищете path.nodes ()
  • 0
    на самом деле да! Что ж, похоже, я до сих пор не понял цели путей. Благодарю. Пожалуйста, поставьте это как ответ, чтобы я мог подтвердить это.
Теги:
neo4j
traversal

1 ответ

0
Лучший ответ

Путь - это набор узлов-узлов-узлов.

С

  • length() вы можете получить доступ к длине пути, т.е. числу rels
  • nodes() возвращает Iterable узлов в пути
  • Отношение() возвращает Iterable отношений в пути
  • путь сам по себе является контейнером контейнеров свойств
  • startNode() и endNode() возвращают соответственно
  • lastRelationship() возвращает последнее отношение в пути, поскольку оно чаще используется

См. Также: http://docs.neo4j.org/chunked/stable/tutorial-traversal-java-api.html#_path

Ещё вопросы

Сообщество Overcoder
Наверх
Меню