0

我正在尝试为 neo4j 创建自己的函数,该函数递归地遍历图形并返回连接到长值大于 100 的边的任何节点和边。

我知道有一个简单的 CYPHER 查询,但是通过这样做,我可以知道如何自己处理更复杂的事情。

伪代码

  1. 从关系类型为“TypeExample”的节点匹配 Id 中获取所有关系。
  2. 如果关系具有长属性“Count”并且 Count > 100,则转到 1。
  3. IF 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());
            }
        }
    }
    }
    
4

0 回答 0