Neo4j 调整查询以返回正确的结果
我有下面的问题。在这里,我收集所有行和技能,将行作为行展开,并检查应聘者技能是否在我想要的所有技能中,我检查与该应聘者相关的所有技能是否在我想要的所有技能列表中。 我需要以某种方式更改查询,因为我希望查询仅在“知道”所有必需技能并且每项技能都具有相同或更多年的经验的情况下才返回我的候选人。 简而言之,如果一个应聘者知道所有技能,并且每个技能都有相同或更多年的经验,那么我想要这个节点,否则不需要。 有什么想法吗Neo4j 调整查询以返回正确的结果,neo4j,cypher,Neo4j,Cypher,我有下面的问题。在这里,我收集所有行和技能,将行作为行展开,并检查应聘者技能是否在我想要的所有技能中,我检查与该应聘者相关的所有技能是否在我想要的所有技能列表中。 我需要以某种方式更改查询,因为我希望查询仅在“知道”所有必需技能并且每项技能都具有相同或更多年的经验的情况下才返回我的候选人。 简而言之,如果一个应聘者知道所有技能,并且每个技能都有相同或更多年的经验,那么我想要这个节点,否则不需要。 有什么想法吗 WITH [ {entity_id: 7, years_of_exp
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;
下面不是您想要的确切查询,因为我使用的是技能名称而不是实体id,但它可以类似于您想要的 步骤:
你永远是最棒的!非常感谢你的回答!我能问更多的问题吗?在
WHERE ALL(skill in rows WHERE skill.name in[c in candidateSkills | c.name])
这到底是什么“[c in candidateSkills | c.name]”?这正式称为列表理解,但基本上这只是转换列表元素的一种方式。对于列表中的每个元素,我们需要的是元素的名称,因此我们最终得到的是名称列表,而不是节点列表。如果我们在列表中添加WHERE子句,列表理解也可以进行过滤。@InverseFalcon非常感谢!
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, rows, 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"}│
└────────────────┘