Мы используем neo4j для хранения академической и профессиональной эволюции многих людей ( Пользователь ) с целью обработки и предоставления информации, которую она содержит, для наших клиентов.
Например, они могут попросить о наиболее частой профессиональной эволюции для людей, которые имели определенный диплом (представленный как узел « Диплом » в базе данных графа) и работали позже на определенной работе ( Узел « Job »).
Обе Работа и Диплом играют аналогичную роль, как «своего рода» шаг, который каждый может сделать в своем резюме (пользователи не имеют к ним прямого отношения). Резюме - это профессиональная деятельность, проводимая определенным лицом в определенный период времени: к ним относится один и только один Пользователь , а также :CONTAINS
a " Job_or_Diploma", чтобы помочь их классификации.
Резюме данного пользователя связаны друг с другом отношениями :LEADS_TO
, следуя их последовательности во времени. Эта последовательность возвращает все резюме этого пользователя. Таким образом, у нас есть пути, как:
(и: Пользователь) - [: HAS] -> (: Резюме) - [: LEADS_TO] -> (: Возобновить) <- [: HAS] - (и) </strong>
Таким образом, проблема, которую нам нужно решить, стала бы: найти самый популярный путь между start: Diploma node и end: Job среди всех путей с "* 1037". * Job_or_Diploma"только узлы.
Поскольку мы определяем наиболее распространенный путь с помощью свойств, которые не принадлежат непосредственно узлам " Job_or_Diploma " и даже любому отдельному узлу («популярность» пути зависит от всего пути, потому что мы измерьте это числом пользователей , которые полностью следовали за ним), мы изо всех сил пытаемся определить, как его найти.
Еще одна ловушка, с которой нам приходится сталкиваться, заключается в том, что на самом деле нет прямой связи между 2 " Job_or_Diploma ": a Резюме :LEADS_TO
в следующем Резюме учебный план пользователя, который :HAS
их, и каждый резюме :CONTAINS
один " Job_or_Diploma " больше, но эти " Job_or_Diploma " не имеют края между собой (см. скриншоты) ниже). Поэтому искомый путь не существует на графике.
Отсюда возникает вопрос: есть ли способ найти «путь» или, вернее, «последовательность» из « Job_or_Diploma », которые были взяты (в хронологическом порядке) наибольшим числом пользователей между определенным дипломом и определенной работой? В идеале мы ищем что-то, что мы могли бы реализовать, используя только Cypher.
Мы были бы рады получить любую информацию, чтобы показать нам, как действовать. Ниже приведены несколько экранов некоторых частей нашего графика, которые подразумеваются в этой проблеме:
Тип конфигурации, с которой мы имеем дело в этой проблеме
2 пользователя Резюме между дипломом инженера и менеджером
Длина 4 пользователей-2 Резюме пути между дипломом инженера и техническим директором
Заранее благодарю за помощь!