Ограничить обход узла на основе курсора до исходящих ребер - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь адаптировать пример Parallel K-Hop Counts Макса де Марци к задаче на ориентированном графе. Используя курсоры отношений и узлов

RelationshipTraversalCursor relsCursor = cursors.allocateRelationshipTraversalCursor();
NodeCursor nodeCursor = cursors.allocateNodeCursor();

read.singleNode(startingNode.getId(), nodeCursor);
nodeCursor.next();

nodeCursor.allRelationships(relsCursor);

, как мне ограничить итерацию по отношениям while (relsCursor.next()) {...} исходящими ребрами?

До сих пор я достиг этого, используя функцию Iterable<Relationship> getRelationships(Direction var1) org.neo4j.graphdb.Node, но поскольку моя интуиция внутреннего API Neo4j Java ограничена, я хотел бы сравнить относительную производительность.

1 Ответ

1 голос
/ 05 августа 2020

Вот полезный фрагмент из соответствующего метода тестирования neo4j , который показывает, как определить направление текущего отношения курсора:

private static String computeKey( ..., RelationshipTraversalCursor r )
{
    Direction d;
    if ( r.sourceNodeReference() == r.targetNodeReference() )
    {
        d = Direction.BOTH;
    }
    else if ( r.sourceNodeReference() == r.originNodeReference() )
    {
        d = Direction.OUTGOING;
    }
    else
    {
        d = Direction.INCOMING;
    }

    .
    .
    .
}

Итак, что-то вроде этого должно работать для вы:

while (relsCursor.next()) {
    if (relsCursor.sourceNodeReference() == relsCursor.originNodeReference()) {
        // Do OUTGOING relationship processing
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...