如何将neo4j节点的属性存储为数组?
我正在使用neo4j进行人力资源分析项目,遇到了一个复杂的问题(我对cypher也很陌生)。基本上,我有一个员工列表,其中包含一些功能,如位置、技能集、教育和位置、所需技能的职位。我查看位置(员工的位置和职位的位置)是否匹配,然后将分数设置为1(否则为0)。如果我只有一个空缺职位,那么查询工作正常。但是,位置越多,变量将被last position的最后一个值覆盖。我可以想象将节点属性放在一个数组中,但cypher似乎没有这样做(不推荐使用) 这是我使用的查询,如果您能帮助我解决这个问题,我将不胜感激。最终目标是为每个给定职位的每位员工打分,并用得分最高的员工填补该职位。这在cypher上可能吗?? 非常感谢如何将neo4j节点的属性存储为数组?,neo4j,cypher,Neo4j,Cypher,我正在使用neo4j进行人力资源分析项目,遇到了一个复杂的问题(我对cypher也很陌生)。基本上,我有一个员工列表,其中包含一些功能,如位置、技能集、教育和位置、所需技能的职位。我查看位置(员工的位置和职位的位置)是否匹配,然后将分数设置为1(否则为0)。如果我只有一个空缺职位,那么查询工作正常。但是,位置越多,变量将被last position的最后一个值覆盖。我可以想象将节点属性放在一个数组中,但cypher似乎没有这样做(不推荐使用) 这是我使用的查询,如果您能帮助我解决这个问题,我将
MATCH
(e:Employee)-[r:FUTURE_POSITION]-> (p:Position {open_status:1}),
(e)-[h:HAS_DEGREE]-> (d:Degree),
(e)-[s:HAS_SKILL]-> (n:Personal_Skill)
WITH r, e,p,d,n,
CASE WHEN p.position_state = e.home_state THEN 1 ELSE 0 END AS SameStateScore,
CASE WHEN p.position_city = e.home_city THEN 1 ELSE 0 END AS SameCityScore,
CASE WHEN d.name = "College Degree" THEN 1 ELSE 0 END AS HasCollegeDegree,
CASE WHEN n.name = "Management" THEN 1 ELSE 0 END AS HasRequiredSkill
SET e.score = SameStateScore + SameCityScore + HasCollegeDegree + HasRequiredSkill
RETURN DISTINCT e.name,p.name, SameStateScore,SameCityScore,HasCollegeDegree,MAX(HasRequiredSkill) AS HasRequiredSkill, e.score
ORDER BY e.score DESC
您在问题()中使用的链接是针对已弃用的旧式RESTAPI的。如果要发出HTTP请求以执行Cypher,可以使用新的 为了每个职位有一个单独的员工分数,您不应该将分数存储在
employee
节点中,而是存储在FUTURE\u position
关系中,因为每个职位都有一个单独的关系。因此,只需使用r.score
而不是e.score
:
MATCH
(e:Employee)-[r:FUTURE_POSITION]->(p:Position {open_status:1}),
(e)-[:HAS_DEGREE]-> (d:Degree),
(e)-[:HAS_SKILL]-> (n:Personal_Skill)
WITH r, e, p,
CASE WHEN p.position_state = e.home_state THEN 1 ELSE 0 END AS SameStateScore,
CASE WHEN p.position_city = e.home_city THEN 1 ELSE 0 END AS SameCityScore,
CASE WHEN d.name = "College Degree" THEN 1 ELSE 0 END AS HasCollegeDegree,
CASE WHEN n.name = "Management" THEN 1 ELSE 0 END AS HasRequiredSkill
SET r.score = SameStateScore + SameCityScore + HasCollegeDegree + HasRequiredSkill
RETURN DISTINCT
e.name, p.name, SameStateScore, SameCityScore, HasCollegeDegree,
MAX(HasRequiredSkill) AS HasRequiredSkill, r.score
ORDER BY r.score DESC
此外,可能不需要
DISTINCT
选项,因为聚合函数(如MAX
)已经确保同一结果行中的非聚合值集是不同的。太棒了!谢谢!成功了。我不得不使用r,e,p,d,n,因为我得到了未知的错误r。我将r,e,p
添加到WITH
中。此外,这也告诉了新的SO用户如何处理答案。我尝试投票,但我得到了这样一句话:“感谢您的反馈!记录了声誉低于15的用户的投票,但不会更改公开显示的帖子分数。”我今天开了我的帐户。当我获得15的声誉时,我会再次尝试。再次感谢你,但是,接受一个答案没有最低声誉。接受这个答案。ThanksHow是否将一名给定员工分配到基于max(r.score)的给定职位,并转移到另一个职位r.score最高的员工?等等谢谢(@cybersam请告知)