如何解决调整查询以返回正确的结果
我有以下问题。在这里,我收集所有行和技能,将行作为行展开并检查候选人的技能是否包含在我想要的所有技能中,我检查与该候选人相关的每项技能是否都在我想要的所有技能列表中。 我需要以某种方式更改查询,因为我希望查询仅在“知道”所有必需技能并且每个技能都具有相同或更多年的经验时才返回我候选人。 简而言之,如果候选人了解所有技能并且每个技能都有相同或更多年的经验,我想要这个节点,否则不。 有什么想法吗?
WITH [
{entity_id: 7,years_of_experience: 5},{entity_id: 23776,years_of_experience: 1 },{entity_id: 17477,years_of_experience: 1 }
] AS rows
UNWIND rows AS row
MATCH (s:SkillNode)
WHERE s.entity_id = row.entity_id
WITH collect(row) as rows,collect(s) as allSkills,s
UNWIND rows as row
MATCH (c:CandidateNode)-[r:KNowS]->(s)
WHERE (r.years_of_experience>=row.years_of_experience AND s in allSkills)
WITH c,collect(distinct r) as rels,collect(distinct s) as skills,allSkills
WHERE ALL(sk in allSkills where sk in skills)
RETURN skills,rels,c;
解决方法
以下不是您想要的确切查询,因为我使用的是技能名称而不是 entity_id,但它可能与您想要的类似。
步骤:
- 将所需的技能和多年的经验放在一个列表(行)中
- 在 SkillNode 中搜索每个必需的技能以确保其有效
- 根据每项技能的多年经验筛选候选人
- 选出在所需技能(行)中具备所有技能的候选人
WITH [
{name: "Java",years_of_experience: 5},{name: "Spring Boot",years_of_experience: 1 }
] AS rows
UNWIND rows AS row
MATCH (skill:SkillNode) WHERE skill.name = row.name
WITH rows,row
// Validate the skills
MATCH (c:CandidateNode)-[r:KNOWS]->(s:SkillNode)
WHERE s.name = row.name
// Check if the years of experience is good
WITH c,r,s,rows,row
WHERE r.years_of_experience >= row.years_of_experience
// Check that candidate has ALL skills required
WITH c,collect(s) as candidateSkills
WHERE ALL(skill in rows WHERE skill.name in [c in candidateSkills|c.name])
RETURN c
Result:
╒════════════════╕
│"Candidate" │
╞════════════════╡
│{"name":"Leo"} │
├────────────────┤
│{"name":"Manos"}│
└────────────────┘
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。