0

我们正在使用 neo4j 存储许多人(用户)的学术和专业发展,以便为我们的客户处理和提供其中包含的信息。

例如,他们可能会要求拥有某个文凭(在图形数据库中表示为“<em>Diploma”节点)并在以后从事某项工作(“<em>Job”节点)。

JobDiploma都扮演着类似的角色,作为每个人都可以在他或她的简历中拥有的“一种”步骤(用户与他们没有直接联系)。简历是某个人在某个时间段内举办的职业活动:有一个且只有一个用户与之相关,还有: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 实现的东西。

我们很高兴收到任何见解,向我们展示如何进行。下面是我们图表的某些部分的几个屏幕,这些屏幕隐含在这个问题中:

我们在这个问题中处理的配置类型

2 个用户在工程文凭和管理职位之间的简历

4 个用户的长度 - 2工程文凭和技术总监职位之间的简历路径

预先感谢您的帮助!

4

1 回答 1

0

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

于 2018-06-28T18:18:50.163 回答