GraphGists

Professionals from the recruiting industry deal with highly interconnected data every day. Making sense of data from various sources in order to match the best candidate for the job is challenging. Companies are now more specific in terms of job profiles and requirements and candidates are more choosy about their roles and responsibilities.

Graphs are a perfect way to model this data. An extremely simple model is depicted in this GraphGist but one can see how it could be extended very naturally to include a much larger variety of data.

RecruitmentModel

This sample dataset includes the following:

  • Persons and the county they reside in

  • Their jobs,roles and companies

  • Competencies, skills and certifications

  • Ratings (employees rating companies and managers rating employees)

Setup

The graph

match n return n

Queries:

Find me the highest rated persons and their certifications

match (person:Person)<-[r:Rated]-()
with person as person,count(*) as raters, collect(r.rating) as ratings
match (person)-[:HasCompetency]->(comp)-[:Certified]->(cert)
with person, raters, ratings, collect(distinct cert.name) as certs
return person.name, reduce(total = 0, n IN ratings| total + n) /raters as avgRating,certs
order by avgRating desc;

Find me all Java people with skill level greater than 2. They should be using Java at their current job and be located in Kent.

match (skill:Skill {name:"Java"})<-[:ForSkill]-(competency)
where competency.highestLevel>1 with competency
match (county:County {name:"Kent"}) with competency,county
match (competency)-[:AtJob]->(job)<-[:CurrentJob]-(person)-[:LocatedIn]->(kent), (job)-[:AtCompany]->(company)
return person.name as person, competency.highestLevel as skillLevel, company.name as company, kent.name as location

Show me all unemployed people skilled in Java?

match (skill:Skill {name:"Java"})<-[:ForSkill]-(competency)-[:HasCompetency]-(person) where not((person)-[:HasJob]->()) return person.name as person,competency.highestLevel as javaSkillLevel

Which are the highest rated companies and what job roles do they offer?

match (company:Company)<-[r:Rated]-()
with company as company,count(*) as raters, collect(r.rating) as ratings
match (company)<-[:AtCompany]->(job)-[:HasRole]->(role)
with company, raters, ratings, collect(distinct role.name) as roles
return company.name, reduce(total = 0, n IN ratings| total + n) /raters as avgRating,roles
order by avgRating desc;

Created by GraphAware

GraphAware is an official consulting partner of Neo Technology