Neo4j Плагин Рекурсивный
Я пытаюсь создать свою собственную функцию для neo4j, которая рекурсивно проходит через граф и возвращает все узлы и ребра, которые связаны с ребром с длинным значением больше 100.
Я знаю, что есть простой запрос CYPHER для этого, но делая это, я могу знать, как выполнить более сложные вещи самостоятельно.
псевдокод
- получить все отношения из узла, совпадающего с идентификатором, где это отношение типа TypeExample.
- если отношение имеет длинное свойство Count и Count > 100, переходите к 1.
Если 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 ответ
Как я могу самостоятельно выполнить более сложные пользовательские процедуры, которые выполняют рекурсивный поиск и возвращают путь?
Некоторые из более продвинутых пользовательских процедур с открытым исходным кодом, которые задокументированы, находятся вThe Neo4j Graph Algorithms
Руководство пользователя v3.4. ( исходный код)
Примечание. Они не устанавливаются вместе с Neo4j и должны быть установлены.