如何在Neo4j图形数据库上使用Cypher解决类似Most-Common-Path-like的probIem



我们使用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节点也可以具有DiplomaJob标签。无需具有具有DiplomaJob标签的单独节点。

因此,您可以将数据模型简化为,例如:

(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标签(例如,上面的查询不使用它(,因此您可以进一步简化数据模型,只具有DiplomaJob标签。

相关内容

最新更新