CH.05Matching is not search: from keywords to meaning— why a job marketplace threw out keyword matching — and what it kept.
← all posts
#0162026-06-136 mincase study

▸ case study — № 016 · jun 13 '26 · 6 min

Matching is not search: from keywords to meaning

why a job marketplace threw out keyword matching — and what it kept.


matchpro is a job marketplace, and it runs on one stubborn opinion:

"matching is not search. search rewards precision. matching rewards being interestingly close."

a search engine is judged on exactness — you typed postgres, you want the rows that say postgres. matching is the opposite game. the best role for a person is often the one they'd never have typed into a search box, and the best candidate for a role is often the one who described the same work in different words. optimize matching like search and you get a system that's confidently, precisely wrong.

the keyword era

for years the matching leaned on exact rules: keyword and title overlap, plus a handful of hard filters. it's the obvious first version, and it isn't even bad — while everyone shares a vocabulary. in one tight field, in one language, people converge on the same words, and word-overlap is a decent proxy for fit.

it gets brittle the moment you leave that world. two people describe identical work in different terms and never meet. a strong candidate uses last year's job title. someone writes in another language entirely. the keyword engine doesn't see a weak match — it sees no match. and the fix — a growing table of synonyms and aliases, hand-fed per field — rots faster than you can maintain it.

from rules to meaning

the rewrite was one idea: compare a profile and a role by what they mean, not which words they happen to share. represent the meaning of each side, and let "close in meaning" do the recall that word-overlap couldn't. suddenly the interestingly-close matches — the ones a recruiter recognizes instantly but the search box hid — surface on their own.

this is the part that reads like magic in a demo and humbles you in production. meaning-based recall is generous; it finds a lot. which is exactly why it can't be the whole system.

keep the boring rules

meaning finds candidates. it does not get to decide who actually qualifies. some things aren't fuzzy — a hard requirement is a hard requirement, and "interestingly close" is the wrong answer when someone simply can't take the role. so the hard constraints stayed, as a gate the meaning-matches have to pass through.

the lesson i keep relearning: the exciting layer (learned similarity) and the boring layer (explicit rules) aren't rivals. the boring one earns its keep. throw it away and your clever matcher confidently recommends impossible things.

meaning travels

the quiet payoff: meaning isn't tied to a vocabulary, so the same approach reaches past the field and the language it was born in. a profile written in one language can match a role written in another, without a translation table per pair. you stop maintaining brittle per-field dictionaries and start trusting a representation that generalizes.

privacy is part of the match

one more constraint shaped all of it: people are matched while anonymous. the system works over profiles stripped of identity, and who-you-are is revealed only when both sides agree to talk. that's a product stance, but it's an engineering one too — it decides what the matcher is even allowed to see, and it keeps the incentives honest. you match on substance because, for a while, substance is all there is.

the takeaway

compress the whole rewrite into one line: match by meaning, decide by rules, reveal by consent. matching by meaning gets the headlines; the boring gate and the privacy stance are what make it usable. matching is not search — and the day you stop optimizing it like search is the day it starts to feel like it understands.

matchpro.io is a privacy-first job marketplace. this is the approach, not the recipe — the interesting parts stay in the repo.