Найти длину (самую дальнюю) между узлами на графике в Neo4J - PullRequest
0 голосов
/ 20 апреля 2020

Нужна помощь в базе данных графа (neo4j)

вот мой график -

Узлы

  • студент (id, название, ссылка)
  • класс (идентификатор, заголовок, ссылка)
  • драма (идентификатор, заголовок, ссылка)

Отношения

  • ученик - LIKE {тип: класс / драма} - ученик
  • ученик - DISLIKE {тип: класс / драма} - ученик
  • ученик - APPEARED - класс
  • student - APPEARED - drama

Сходство можно измерить по его «длине», где каждый переход через отношение «Like» составляет одну единицу длины. Найдите союзника, наиболее удаленного от студенческого билета

1 Ответ

0 голосов
/ 20 апреля 2020
MATCH (s:Student{id :"studentId"})-[r:like*]->(s1:Student)
WITH s , s1 , COLLECT(SIZE(relationships(r))) as distanceList
WITH s, s1, apoc.coll.sort(distanceList)  as sortedDistanceList
WITH s, s1 , sortedDistanceList[0] as closestDistance ORDER BY closestDistance DESC LIMIT 1 
RETURN s1.id as farthestNodeId

Сначала попытайтесь найти все узлы ученика, связанные с данным учеником, с переменной длиной. Студент может быть связан с другим студентом несколькими способами. Таким образом, мы храним расстояния всех путей в distanceList. Затем мы можем отсортировать список, чтобы получить наименьший путь. Самый длинный из самых маленьких путей - самый дальний узел. На одном самом большом расстоянии может быть несколько узлов. Если вы хотите получить все из них, вы можете собрать все эти студенческие идентификаторы в список.

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