Personalised Search Re-ranking

Every learner gets the same search results today. Re-ranking takes those results and reorders them based on who you are — your skills, role, language, region, learning history, and enrollment progress. Uses local AI embeddings for semantic matching that goes beyond keyword lookup.

Without Re-ranking

  • 1. Generic result (not your domain)
  • 2. Content you already completed
  • 3. Advanced level (you are a beginner)
  • 4. Wrong language, wrong region
  • 5. In-progress content buried at position 20

With Re-ranking

  • 1. Continue learning (in progress) boosted
  • 2. 68% profile match holistic AI
  • 3. Matches your skill gap semantic match
  • 4. In your language, your region boosted
  • 5. French version available revision found
  • Already completed downgraded

The Pipeline

1

Tier Check

How much do we know? Tier 0 (nothing) to Tier 3 (rich profile). Determines which signals activate.

2

Query Context

Analyse the search query to adjust signal weights. LLM or local rules classify the query and tune weights dynamically.

3

Hard Filters

Remove content based on non-negotiable rules (e.g., completed content when toggle is off).

4

AI Embedding

Local MiniLM-L6-v2 computes holistic profile-content similarity + individual semantic signals. Content embeddings cached in Redis.

5

Signal Scoring

15 signals scored per result with query-adjusted weights. Each contributes a positive or negative boost.

6

Diversity

Max 3 per provider in top 10. Prevents any single source from dominating.

The Formula

personalizedScore = baseScore × (1 + Σ(signalBoost × tierWeight))

Each signal contributes a boost (positive or negative) multiplied by its tier-dependent weight. Semantic signals scale by similarity score (e.g., 82% match → stronger boost than 45% match). Enrollment status applies fixed boosts independent of tier weights. A total boostSum of 0.2 means the result's score increases by 20%.