我正在尝试为neo4j创建自己的函数,该函数递归地遍历图并返回连接到长值大于100的边的任何节点和边。
我知道有一个简单的CYPHER查询,但是通过这样做,我可以知道如何自行处理更复杂的内容。
伪代码
如果深度为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());
}
}
}
}
答案 0 :(得分:0)
如何自行进行更复杂的用户定义过程 递归搜索并返回路径?
其中记录了一些更高级的开源user-defined过程,
The Neo4j Graph Algorithms
User Guide v3.4。 (source-code)
注意:这些未随Neo4j一起安装,必须为installed。