Noe4j: высота узла root - PullRequest
       5

Noe4j: высота узла root

0 голосов
/ 06 февраля 2020

Я использую Neo4j 3.5 версии

Я хочу выяснить высоту узла 'p' в отношении (p:Person)-[r:CHILD*0..]->(c:Person).

Высота узла определяется как расстояние между root и листовым узлом, которое находится на максимальном расстоянии от root.

Я хочу выяснить это для > 100 000 узлов с использованием процедур apo c. Кто-нибудь может подсказать, пожалуйста, как мне решить эту проблему.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Следующий запрос, вероятно, самый простой. Это гарантирует, что последний узел каждого совпавшего пути является листовым узлом, а затем возвращает длину пути. APO C не требуется.

MATCH k = (p:Person)-[:CHILD*0..]->(c)
WHERE NOT (c)-[:CHILD]->()
RETURN p.code, LENGTH(k) AS score

Я предполагаю, что отношение CHILD всегда указывает на Person, и поэтому для эффективности я оставляю эту метку вне конечных узлов в запрос выше.

[ОБНОВЛЕНИЕ]

Если вам нужен только путь с максимальной длиной пути, вы можете сделать это:

MATCH k = (p:Person)-[:CHILD*0..]->(c)
WHERE NOT (c)-[:CHILD]->()
RETURN p.code, LENGTH(k) AS score
ORDER BY score DESC LIMIT 1
0 голосов
/ 06 февраля 2020

Я понял это:

MATCH k = (p:Person)-[r:CHILD*0..]->(c:Person) 
where p.name = "Krishna"
with p, collect(length(k)) as score
unwind score as e
return p.code, max(e) as score

Здесь

k - длина каждого пути

собирать (length (k)) составляет список длин путей к дочерним узлам для каждого root

размотка будет использоваться для обхода каждого элемента списка

И затем с помощью функции max мы можем определить расстояние до самого дальнего дочернего узла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...