RAG for job recommendations: building a semantic matching engine

Keyword job alerts send irrelevant spam to candidates. Here is how modern career platforms use RAG, multi-vector candidate embeddings, and hybrid filtering to match candidates with their dream jobs.

JobsDart Editorial4 min read

Key takeaways

  • Traditional job alerts rely on rigid title matching, flooding candidates with irrelevant notifications (e.g. sending junior roles to staff engineers).
  • Semantic job recommendation models candidates and job postings as rich, multi-dimensional vector embeddings.
  • A multi-vector candidate profile separates technical competencies, preferred working culture, and domain experience into distinct vectors.
  • Hybrid filtering combines vector similarity with deterministic relational constraints (salary floors, remote eligibility, visa sponsorship).
  • RAG synthesizes personalized match rationales: explaining to the candidate exactly why a specific role matches their unique career trajectory.

The failure of legacy job alerts: why keyword alerts spam users

Almost every professional has had the frustrating experience of setting up an alert on a traditional job board for "Senior Software Engineer" only to receive daily emails promoting entry-level QA jobs, unrelated IT helpdesk positions, or listings located in cities thousands of miles away.

Legacy job platforms rely on simplistic title-string matching. If an employer uses a creative title like "Product Infrastructure Craftsman", traditional alert engines miss it completely. If a job posting mentions "software engineer" in the company boilerplate, the keyword scanner flags it as a match regardless of the actual role.

Modern platforms (like JobsDart) solve this challenge by applying Retrieval-Augmented Generation to candidate recommendations. By treating the candidate’s career history and the employer’s job posting as rich semantic documents, RAG discovers deep alignment that goes far beyond surface-level job titles.

How a semantic job recommendation engine works

A production job recommendation engine operates as a bidirectional matching system combining vector retrieval with structured relational filters.

  • 1. Multi-Vector Candidate Profiling: Instead of averaging an entire resume into a single blurry vector, the engine generates distinct sub-vectors: Core Technical Skills, Management & Leadership Depth, and Domain Experience (e.g. Fintech, Healthcare).
  • 2. Structured Constraint Filtering: Hard parameters — minimum desired salary, remote vs hybrid preference, visa sponsorship requirements, and seniority tier — are indexed in PostgreSQL relational columns.
  • 3. Two-Stage Retrieval: When a candidate browses their feed (or when a background worker evaluates new daily listings), the engine runs a SQL pre-filter to enforce hard constraints, followed by a pgvector HNSW cosine search against the candidate’s skill vectors.
  • 4. RAG Match Explanation: The top 5 matching jobs are passed to a lightweight LLM that generates a personalized match rationale: "We recommend this role because their distributed streaming stack matches your 4 years of Kafka experience at your previous company."
Traditional keyword alerts vs RAG-powered job recommendations
FeatureTraditional Keyword AlertsRAG Job Recommendation Engine
Title MatchingLiteral exact string matchingSemantic equivalence (maps non-standard titles)
Skill NuanceBinary word presenceEvaluates depth, recency, and seniority context
Hard ConstraintsBasic checkboxes (frequently ignored)Strict SQL pre-filtering (salary, remote, visa)
Candidate FeedbackNone ("Role matches 'Engineer'")Personalized match rationale explaining exact fit
Cold Start HandlingRequires extensive manual search setupsInstantly bootstrapped from a single resume upload

Solving the cold-start problem with resume RAG

A major challenge in traditional collaborative filtering recommendation systems (like matrix factorization) is the cold-start problem: a new user has zero click history, so the algorithm cannot predict what they want.

RAG eliminates the cold-start problem completely. When a user creates an account and uploads their resume, the ingestion worker parses their career history, generates their semantic skill vectors, and immediately queries the active job catalog.

Within 500 milliseconds of signing up, the candidate receives a curated feed of job opportunities that closely match their real-world experience, without requiring them to fill out tedious 30-step preference questionnaires.

Engineering considerations: real-time streaming vs batch matching

To scale a job recommendation engine to millions of candidates and tens of thousands of daily job listings, engineering teams balance real-time user browsing with asynchronous push alerts.

When a user visits their dashboard, execute real-time vector queries against the active job index using PostgreSQL pgvector with HNSW indexing to deliver instantaneous sub-50ms feed rendering.

When an employer posts a new job, publish an event to a Kafka or RabbitMQ queue. An asynchronous worker queries candidate vectors that match the job criteria, bundling the best candidates into daily notification digests for recruiters.

  • Use HNSW vector indexes in PostgreSQL for sub-50ms candidate-to-job similarity queries
  • Enforce strict SQL pre-filtering on salary and location before running vector distance calculations
  • Generate transparent match explanations so candidates understand why a job was recommended
  • Decouple real-time dashboard searches from asynchronous background email push notifications

Frequently asked questions

How does RAG improve job recommendations?

RAG understands the semantic meaning of candidate experience and job descriptions, matching candidates based on real capabilities rather than rigid job titles, while generating personalized explanations for why a role fits.

How does a semantic job matching engine handle salary and location constraints?

Through hybrid search: relational SQL filters enforce non-negotiable hard constraints (like minimum salary, remote availability, and visa sponsorship), and vector similarity scores the semantic skill fit across the filtered results.

What is a multi-vector candidate profile?

A multi-vector candidate profile generates separate embeddings for different dimensions of a candidate’s background (technical skills, management experience, industry domain), allowing more nuanced matching than a single averaged resume vector.

How does RAG solve the cold-start problem in job recommendations?

By using the candidate’s uploaded resume as an immediate semantic query against the job catalog, delivering personalized recommendations instantly on day one without waiting for click history.

Can a job portal explain why a job was recommended using RAG?

Yes. By passing the matching candidate achievements and job responsibilities into an LLM, the system generates a concise, transparent match rationale highlighting specific overlapping skills.

Further reading

Check this against your own resume

Scan your CV against a real job description, or build a parse-safe one from scratch. Your first scan costs nothing.

Keep reading

All career guides