Aller au contenu principal

Moteur de recherche

Statut

Document de cadrage architecture — v1.0 — relu le 2026-05-10.

État actuel

Il n'existe pas de moteur de recherche dédié dans l'architecture DMV actuelle.

La recherche est implémentée par des requêtes SQL avec des opérateurs LIKE ou ilike (insensible à la casse) directement dans les services Laravel, sur PostgreSQL (Supabase).

Cette approche est fonctionnelle pour un volume de données modéré et une base de cas d'usage simples (recherche par nom, par commune, par tag).

Limites de l'approche LIKE

LimitationImpact
Performance dégradée sur grandes tables sans indexRequêtes lentes à l'échelle
Pas de recherche floue (fautes de frappe)Expérience utilisateur limitée
Pas de classement par pertinenceRésultats non triés par score
Pas de recherche plein texte avancéeSynonymes, stemming absents
Pas de recherche multi-modèles unifiéeSilos par entité

Vision cible

La cible est l'intégration d'un moteur de recherche adapté à l'échelle :

  • PostgreSQL full-text search : option native sans infrastructure supplémentaire, adaptée si les volumes restent raisonnables.
  • Meilisearch : moteur open-source performant, compatible avec Laravel Scout, offrant recherche floue et classement par pertinence.
  • Typesense : alternative à Meilisearch, plus léger.
  • Algolia : SaaS performant mais coûteux à l'échelle.

Laravel Scout facilite l'intégration de tous ces backends avec une API unifiée.

Entités concernées

Les recherches portent principalement sur :

  • Acteurs (nom, description, commune, kind)
  • Publications
  • Communes
  • Associations (AssoSuite)
  • Services municipaux (Mairie)

État actuel vs cible

AspectÉtat actuelCible
MoteurSQL LIKE / ilikePostgreSQL FTS ou Meilisearch
Intégration LaravelRequêtes manuellesLaravel Scout
Recherche floueNonOui
IndexationNonIndex dédié mis à jour en temps réel
Multi-entitésNonRecherche unifiée

Points à clarifier

  • Volume de données attendu (décision entre PostgreSQL FTS et Meilisearch).
  • Fréquence de mise à jour des index.
  • Champs à indexer par entité (données sensibles à exclure).
  • Stratégie de déploiement et hébergement du moteur.