У меня есть график узлов с отношением СЛЕДУЮЩАЯ с последовательностью 2 свойств ( s ) и положением ( p ). Например:
N1-[NEXT{s:1, p:2}]-> N2-[NEXT{s:1, p:3}]-> N3-[NEXT{s:1, p:4}]-> N4
Узел N может иметь несколько исходящих Next отношений с различными значениями свойств.
Дан список имен узлов, например, [N2, N3, N4] представляющий последовательный путь, я хочу проверить, содержит ли граф узлы и связаны ли эти узлы с отношением Далее по порядку.
Например, если список содержит [N2, N3, N4], проверьте, существует ли связь Далее между узлами N2, N3 и между N3, N4.
Кроме того, я хочу убедиться, что узлы являются частью одной и той же последовательности, поэтому свойство s одинаково для каждого отношения Далее . Чтобы убедиться, что порядок поддерживается, мне нужно проверить, является ли свойство p инкрементным. Это означает, что значение p во взаимосвязи между N2 -> N3 равно 3 , а значение p между N3-> N4 равно (3 + 1) = 4 и т. Д.
Я попытался с помощью APOC извлечь возможные пути из начального узла N с помощью python (library: neo4jrestclient), а затем обработать пути вручную, чтобы проверить, существует ли последовательностьиспользуя следующий запрос:
q = "MATCH (n: Node) WHERE n.name = 'N' CALL apoc.path.expandConfig (n {relationsFilter: 'NEXT>', maxLevel: 4}) YIELD path RETURN path "
results = db.query (q, data_contents = True)
Однако выполнение запроса заняло некоторое время, и я в итоге остановил запрос. Есть идеи?