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