Максимальная глубина и путь Neo4j - PullRequest
0 голосов
/ 25 февраля 2019

Простой вопрос: как рассчитать максимальное значение глубины и путь максимальной глубины из узла, используя neo4j (2.3.11) cypher?

Объяснение моего сценария

У меня естьметка узла с именем person и типы отношений с именем supervised .

Представьте себе сценарий: узел 1 может контролировать 2 , 2 может контролировать 3 и 4 , 4 может контролировать 5 и т. Д.

Итак, 1 нужно:

  1. Я хочу создать шифр, который получит в качестве параметра идентификатор, например, 1 (personID), и вернет путь [1, 2,4, 5 ....]

  2. И еще один шифр, который возвращает счет пути.


Я попробовал этот шифр (neo4j2.3.11) для второго случая, безуспешно:

MATCH (person:Person)-[SUPERVISED*]->()
WITH person, LENGTH(SUPERVISED) AS depth
where person.personID = 'la3486551918237738'
RETURN person, depth;

На основании это решение

1 Ответ

0 голосов
/ 25 февраля 2019

Вы можете получить максимальную глубину и список идентификаторов в одном запросе:

MATCH path=(person:Person)-[:supervised*]->(x)
WHERE person.personID = 'la3486551918237738' AND NOT EXISTS((x)-[:supervised]->())
WITH person, path
ORDER BY LENGTH(path) DESC
LIMIT 1
RETURN person, [n IN NODES(path) | n.personID] AS ids, LENGTH(path) AS depth

Примечания:

  • Я предполагаю, что supervised является обязательным типом отношения,Обратите внимание, что двоеточие должно предшествовать типу отношения при использовании в шаблоне Cypher, как в [:supervised*].
  • Для теста NOT EXISTS((x)-[:supervised]->()) требуется, чтобы найденные пути заканчивались конечным узлом.
  • ORDER BY LENGTH(path) DESC LIMIT 1 выбирает самый длинный путь.

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

Я обнаружил следующие проблемы в ваших образцах данных, на которые ссылаются в комментариях :

  1. Ни один из Relations.csv файлов studentID s не отображается как personID в Nodes.csv.(Поскольку вы указали, что это просто недосмотр в примере, я просто исправил это в своей собственной копии файлов.)
  2. Первый запрос LOAD CSV содержит ненужные OPTIONAL MATCH.
  3. Для второго запроса LOAD CSV требуется свойство csvFile.institution, но файл Relations.csv не содержит заголовка institution (вместо него есть заголовок university_name).Таким образом, замена csvFile.institution на csvFile.university_name исправляет второй запрос.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...