Neo4j Плагин Рекурсивный - PullRequest
       16

Neo4j Плагин Рекурсивный

0 голосов
/ 02 ноября 2018

Я пытаюсь создать свою собственную функцию для neo4j, которая рекурсивно проходит через граф и возвращает все узлы и ребра, которые связаны с ребром с длинным значением больше 100.

Я знаю, что есть простой запрос CYPHER для этого, но, делая это, я могу знать, как выполнить более сложные вещи самостоятельно.

псевдокод

  1. получить все отношения из узла, совпадающего с идентификатором, где это отношение типа TypeExample.
  2. если отношение имеет длинное свойство Count и Count> 100, переходите к 1.
  3. ЕСЛИ 5 узлов глубоко, остановитесь. вернуть список узлов и ребер с интерфейсом IPath.

    package example;
    
    import java.util.Iterator;
    import java.util.stream.Stream;
    import java.util.stream.StreamSupport;
    import org.neo4j.graphdb.GraphDatabaseService;
    import org.neo4j.graphdb.Label;
    import org.neo4j.graphdb.Node;
    import org.neo4j.graphdb.Relationship;
    import org.neo4j.graphdb.ResourceIterator;
    import org.neo4j.logging.Log;
    import org.neo4j.procedure.*;
    import org.neo4j.procedure.Description;
    import org.neo4j.procedure.Name;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    import org.neo4j.graphdb.index.Index;
    import org.neo4j.graphdb.index.IndexManager;
    
    public class NodeFinder {
    
    @Context
    public GraphDatabaseService db;
    
    @Context
    public Log log;
    
    @Procedure
    @Description("finds Nodes one step away")
    public Stream<SomeList> GetRelations(@Name("nodeId") long nodeId, @Name("depth") long depth, @Name("rel") String relType) {
        Recursive(nodeId);
       //return list of Nodes and Edges 
    }
    
    private void Recursive(long id) {
        Node node = db.getNodeById(nodeId);
        Iterable<Relationship> rels = node.getRelationships();
    
        for (Relationship rel : rels) {
            long c = (long) rel.getProperty("Count");
            if (c > 100) {
                Recursive(rel.getEndNodeId());
            }
        }
    }
    }
    

1 Ответ

0 голосов
/ 02 ноября 2018

Как я могу самостоятельно выполнять более сложные пользовательские процедуры? что искать рекурсивно и вернуть путь?

Некоторые из более продвинутых заданных пользовательских процедур с открытым исходным кодом, которые описаны в
The Neo4j Graph Algorithms Руководство пользователя v3.4 . ( исходный код )

Примечание. Они не устанавливаются вместе с Neo4j и должны быть установлены .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...