我正在尝试为 neo4j 创建自己的函数,该函数递归地遍历图形并返回连接到长值大于 100 的边的任何节点和边。
我知道有一个简单的 CYPHER 查询,但是通过这样做,我可以知道如何自己处理更复杂的事情。
伪代码
- 从关系类型为“TypeExample”的节点匹配 Id 中获取所有关系。
- 如果关系具有长属性“Count”并且 Count > 100,则转到 1。
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()); } } } }