Neo4j插件递归

时间:2018-11-02 12:42:28

标签: java neo4j neo4j-plugin

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

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

伪代码

  1. 从类型为“ TypeExample”的节点匹配ID中获取所有关系。
  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 :(得分:0)

  

如何自行进行更复杂的用户定义过程   递归搜索并返回路径?

其中记录了一些更高级的开源user-defined过程,
The Neo4j Graph Algorithms User Guide v3.4。 (source-code

注意:这些未随Neo4j一起安装,必须为installed