Recherche et Algolia
Cette page couvre la synchronisation Algolia telle qu’implémentée.
Sources principales :
convex/integrations/algolia.ts
convex/schema.ts
web/src/app/search/page.tsx
web/src/app/admin/search/page.tsx
web/src/components/search.tsx
web/src/hooks/use-keyboard-navigation.ts
Variables et index (vérifié)
Variables lues :
NEXT_PUBLIC_ALGOLIA_APP_ID
ALGOLIA_WRITE_API_KEY
NEXT_PUBLIC_ALGOLIA_INDEX_NAME (défaut cel_public)
ALGOLIA_ADMIN_INDEX_NAME (défaut cel_admin)
Index destination :
- public :
NEXT_PUBLIC_ALGOLIA_INDEX_NAME
- admin :
ALGOLIA_ADMIN_INDEX_NAME
Types indexés (vérifié)
Public :
club
player
match
article
league
Admin :
user
transfer
sanction
audit_log
ea_unmatched
Le syncer rejette un type inconnu (Unsupported document type for Algolia sync).
syncDocument (unitaire)
- lit/écrit un objet avec
op: upsert|delete,
- si
ALGOLIA_WRITE_API_KEY ou NEXT_PUBLIC_ALGOLIA_APP_ID manquants : skip silencieux avec warning,
- en
delete : suppression directe dans l’index cible,
- en
upsert :
- récupère le payload (
getPublicSearchPayload ou getAdminSearchPayload),
- si payload nul/insuffisant (supprimé, inactif, non publié), tente la suppression sur Algolia,
- sinon
PUT du payload.
Reindex global (vérifié)
Action reindexAllAction(indexType) supporte public | admin | all.
- pagination :
REINDEX_PAGE_SIZE = 100,
- envoi par lot :
ALGOLIA_BATCH_SIZE = 150 vers endpoint batch Algolia,
- pour chaque type public/admin : pagine avec
getPaginated...Payloads jusqu’à exhaustion,
- renvoie
{ success: true }.
Requête de payloads pour reindex
getPaginatedPublicPayloads : source table par type public.
getPaginatedAdminPayloads : source table par type admin.
Surfaces Algolia frontend
La route /search consomme l’index public et propose les onglets :
club → /clubs/:id
player → /players/:userId
match → /matches/:id
article → /journal/:slug
league → /leagues/:id
La route /admin/search et la recherche du header admin consomment l’index
admin :
user → /admin/users?search=...
transfer → /admin/transfers?search=...
sanction → /admin/sanctions?search=...
audit_log → /admin/audit?search=...
ea_unmatched → /admin/matches?search=...
Les deux pages filtrent les résultats par type côté client après réception des
hits Algolia. Si l’App ID ou la clé search-only manque, la surface affiche son
état « recherche non configurée ».
Index Convex searchIndex
Les occurrences searchIndex(...) observées dans schema.ts :
search_announcements → listes et administration des annonces,
search_articles → journal public et administration des articles,
search_audit_logs → /admin/audit,
search_clubs → annuaire/recrutement public et /admin/clubs,
search_disputes → /admin/disputes,
search_matches → /admin/matches,
search_notifications → /admin/notifications,
search_email_delivery_logs → /admin/emails,
search_sanctions → /admin/sanctions,
search_transfers → /admin/transfers,
search_displayName et search_users → recherche de joueurs/recrues et
administration des utilisateurs.
Ces index Convex alimentent les queries métier correspondantes ; ils sont
distincts des deux index Algolia de recherche globale.Last modified on July 16, 2026