Indexation : slug_index et search_index peuvent contenir des UUIDs orphelins #53

Closed
opened 2026-05-14 06:54:41 +00:00 by cedricAbonnel · 0 comments
Owner

Problème

Un article supprimé (ou jamais déployé sur un site) reste référencé dans search_index.json et slug_index.json. Quand un visiteur arrive sur son URL :

  1. getBySlug() trouve l'UUID dans le slug index
  2. getByUuid() échoue (dossier absent) → retourne null
  3. searchAndRedirect() est appelé et peut rediriger vers un article complètement différent

Cas concret : bienvenue-sur-varlog-carnet-de-bord-technique redirigé vers un autre article sur www.abonnel.fr.

Ce qui a été corrigé

  • getBySlug() : si getByUuid() retourne null, reconstruction automatique du slug index depuis loadAll() (source de vérité)
  • buildSlugIndex() : utilise loadAll() au lieu de getSearchIndex() — garantit que seuls les dossiers existants sont indexés
  • searchAndRedirect() : redirige uniquement si le résultat est en tier 1 (tous les tokens du slug trouvés exactement dans le titre), pas sur de simples correspondances floues

Reste à faire

Nettoyage de search_index.json

Le search_index.json peut contenir des articles orphelins (UUID sans dossier). Il faudrait :

  • Ajouter une passe de nettoyage dans rebuildSearchIndex() qui filtre les UUIDs sans dossier existant
  • Ou déclencher un rebuild complet lors d'un sync.sh si le nombre d'articles a diminué

Détection de divergence data ↔ index

Ajouter une commande admin « Vérifier la cohérence des index » qui liste :

  • UUIDs dans search_index.json sans dossier correspondant
  • Slugs dans slug_index.json pointant vers des UUIDs absents
  • Dossiers UUID sans entrée dans les index
## Problème Un article supprimé (ou jamais déployé sur un site) reste référencé dans `search_index.json` et `slug_index.json`. Quand un visiteur arrive sur son URL : 1. `getBySlug()` trouve l'UUID dans le slug index 2. `getByUuid()` échoue (dossier absent) → retourne `null` 3. `searchAndRedirect()` est appelé et peut rediriger vers un **article complètement différent** Cas concret : `bienvenue-sur-varlog-carnet-de-bord-technique` redirigé vers un autre article sur www.abonnel.fr. ## Ce qui a été corrigé - `getBySlug()` : si `getByUuid()` retourne null, reconstruction automatique du slug index depuis `loadAll()` (source de vérité) - `buildSlugIndex()` : utilise `loadAll()` au lieu de `getSearchIndex()` — garantit que seuls les dossiers existants sont indexés - `searchAndRedirect()` : redirige uniquement si le résultat est en **tier 1** (tous les tokens du slug trouvés exactement dans le titre), pas sur de simples correspondances floues ## Reste à faire ### Nettoyage de `search_index.json` Le `search_index.json` peut contenir des articles orphelins (UUID sans dossier). Il faudrait : - Ajouter une passe de nettoyage dans `rebuildSearchIndex()` qui filtre les UUIDs sans dossier existant - Ou déclencher un rebuild complet lors d'un `sync.sh` si le nombre d'articles a diminué ### Détection de divergence data ↔ index Ajouter une commande admin « Vérifier la cohérence des index » qui liste : - UUIDs dans `search_index.json` sans dossier correspondant - Slugs dans `slug_index.json` pointant vers des UUIDs absents - Dossiers UUID sans entrée dans les index
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: cedricAbonnel/folio#53