我们正在使用 neo4j 存储许多人(用户)的学术和专业发展,以便为我们的客户处理和提供其中包含的信息。
例如,他们可能会要求拥有某个文凭(在图形数据库中表示为“<em>Diploma”节点)并在以后从事某项工作(“<em>Job”节点)。
Job和Diploma都扮演着类似的角色,作为每个人都可以在他或她的简历中拥有的“一种”步骤(用户与他们没有直接联系)。简历是某个人在某个时间段内举办的职业活动:有一个且只有一个用户与之相关,还有:CONTAINS
一个“ Job_or_Diploma ”来帮助对其进行分类。
给定用户的简历通过:LEADS_TO
关系相互链接,遵循他们的时间顺序。此继承会返回此用户的整个简历。所以我们有这样的路径:
(u:用户)-[:HAS]->(:Resume)-[:LEADS_TO]->(:Resume)<-[:HAS]-(u)
因此,我们需要解决的问题将变成:在所有具有“ Job_or_Diploma ”节点的路径中,找到start:Diploma节点和end:Job节点之间最流行的路径。
因为我们通过不直接属于“ Job_or_Diploma ”节点,甚至不属于任何单个节点的属性来定义最常见的路径(路径的“流行度”取决于整个路径,因为我们通过关注的用户数量来衡量它它完全),我们很难确定如何找到它。
我们必须面对的另一个陷阱是,2 个“ Job_or_Diploma ”之间实际上没有直接联系: a Resume :LEADS_TO
以下Resume在他们的用户的课程中:HAS
,并且每个 Resume:CONTAINS
一个“ Job_or_Diploma ”的更多,但是那些“ Job_or_Diploma ”有彼此之间没有边缘(参见下面的屏幕截图)。所以我们正在寻找的路径在图中不存在。
因此,问题是:有没有办法找到“ Job_or_Diploma ”的“路径”,或者更确切地说是“继承”,在某个文凭和某个工作之间由最多的用户采取(按时间顺序)?理想情况下,我们寻找可以仅使用 Cypher 实现的东西。
我们很高兴收到任何见解,向我们展示如何进行。下面是我们图表的某些部分的几个屏幕,这些屏幕隐含在这个问题中:
4 个用户的长度 - 2工程文凭和技术总监职位之间的简历路径
预先感谢您的帮助!