OnyxJobs · Knowledge Base
How the OnyxJobs Matching Engine works
AAA 6-Level taxonomy · 6 weighted axes · verifiable Why-match
The five pillars
AAA Taxonomy
L1 Domain → L6 Title — one tree for jobs and talents.
Six axes
Sector, experience, language, salary, semantic, taxonomy.
Two lenses
Talent Fit % and Employer Fit % — same evidence, different ranking.
Calibration
Sector multipliers learned from real outcomes, fairness-floored.
Explainability
Every score ships with a per-axis breakdown — no black box.
1 · The AAA 6-Level taxonomy
- Every job and every candidate is mapped onto the same six-level tree: L1 Domain → L2 Industry → L3 Function → L4 Specialization → L5 Band → L6 Title.
- This is the single source of truth: the talent profile, the job posting, the recruiter filters, and the admin cockpit all read from it.
- Because both sides speak the same vocabulary, the matching engine compares like-for-like instead of guessing from free-text keywords.
2 · The six weighted axes
Read details
- Sector — how close the candidate's industry experience is to the job's L2 industry.
- Experience — years in role versus the band required, with cap and decay to avoid runaway over-credit.
- Language — required vs spoken languages, weighted by proficiency.
- Salary — fit inside the job's offered band, with upside if the candidate's current pay leaves room to grow.
- Semantic — embeddings on title + summary close the gap when titles differ but the work is the same.
- Taxonomy — function, specialization, industry, domain, and band agreement across the AAA tree, with band guardrails and L3 knockouts.
- Outer weights sum to 1.0; taxonomy sub-weights sum to 1.0; both are tunable in the admin cockpit and versioned in match_config.
3 · Two lenses on the same evidence
Read details
- Talent Fit % answers: 'Is this job a good move for me?' It rewards salary upside, role growth, and language clearance.
- Employer Fit % answers: 'Is this candidate a strong hire for this role?' It rewards experience match, sector depth, and verified identity.
- Both lenses read the same scored evidence — the per-axis breakdown — so recruiter and talent see the same facts, just ranked differently.
4 · Outcome-driven calibration (with a fairness floor)
Read details
- When recruiters mark a match as viewed, shortlisted, interviewed, or hired, those signals feed back into per-sector calibration multipliers.
- A sector that consistently converts above the global baseline gets a small lift; one that consistently under-converts gets a small dampen.
- All multipliers are clamped by the fairness_floor admin setting (default 0.85). The engine cannot punish a sector below that floor or reward it beyond 1/floor.
- A holdout percentage can be set so a deterministic slice of seekers always sees the un-calibrated score, giving a clean A/B baseline.
5 · Verification, PII, and the Why-match drawer
Read details
- Emirates ID and Trade Licence verification add a trust signal that ranks verified profiles ahead of unverified ones at equal Fit %.
- Contact fields are column-level revoked from the public API — recruiters only see contact info for candidates they verifiably hire-stage.
- Every match shows a Why-match drawer with the per-axis breakdown, version of the engine config used, and the calibration applied — so scores are auditable.
Frequently asked
Does a higher Fit % always mean I will get hired?
No. Fit % is a ranking signal. Hiring decisions are made by the employer — Onyx makes sure you are seen by the right ones.
Can recruiters see my email or phone before I apply?
No. Contact fields are column-level revoked at the database. Recruiters only see contact info for candidates they have hire-staged through the platform.
What happens when the engine weights are updated?
Every change creates a new immutable version row in match_config. The in-memory weight cache is busted so the next score uses fresh values without a redeploy.
Why do two similar candidates sometimes get different Fit %?
Sector calibration, language clearance, verification status, and salary upside can all shift the score. The Why-match drawer shows the exact axis-by-axis difference.
Try it on real data
Open Job Terminal to see matched jobs, or create a profile to be matched yourself.