Bilel Abdelmoula

Home › Blog

OpenAI · Embeddings · Vector search

AI Candidate Matching With Embeddings and Vector Search

By Bilel Abdelmoula ·

Recruiters on a platform I built had 35k candidates and 4k jobs. Finding good fits by hand was slow. I added AI matching with OpenAI embeddings and vector search, and kept classic boolean and distance filters so recruiters stayed in control.

Keywords aren't enough

A job asks for a "front-end developer"; a CV says "React engineer". A keyword search misses that match. Embeddings fix this: they turn text into numbers that capture meaning, so similar profiles end up close together even when the words differ.

How the matching works

  • Embeddings from OpenAI for candidate profiles and job descriptions.
  • Vector search to find the candidates closest in meaning to a job.
  • Boolean filters (AND / OR / NOT) for must-haves and deal-breakers.
  • Distance filters for location.

Why keep the filters?

AI ranking is great at "who is similar", but recruiters also have hard rules: a required skill, a city, a candidate they've already ruled out. Combining both lets the AI suggest while the recruiter decides.

Tip: show recruiters why a candidate was suggested (matching skills, distance). Trust in AI results grows when people can check them.

Making it fast

Matching only helps if it's quick. On the same platform, PostgreSQL indexes and background jobs made slow endpoints 15× faster, and CV parsing moved into background jobs so new candidates are processed without anyone waiting.

Got a slow or messy app?

I'm a remote full-stack developer (Xano, WeWeb, React, AI). A short call is enough to see if I can help.

More articles