tripoli.cloud/tripoli-api/migrations/0003_search.sql
Adam Belkacemi 3172b3e256
All checks were successful
CI / build-and-test (push) Successful in 2m16s
CI / deploy (push) Successful in 3m16s
Vitrine publique (accueil, architecture, statut) + recherche plein texte
- Nouvelles pages publiques sans routeur externe (History API minimale,
  useRoute/RouteLink) : accueil, /architecture (état réel du projet,
  honnête sur les limites), /statut (télémétrie live de tripoli-edge
  lue directement sur /healthz et /metrics, aucune donnée simulée).
- Recherche façon Spotlight dans TopBar : nouvel endpoint
  GET /api/search côté tripoli-api, recherche plein texte Postgres
  (tsvector généré + index GIN) sur le nom ET le contenu des fichiers
  texte extrait à l'upload (formats texte/code, borné à 5 Mio) ;
  extraits de résultat via ts_headline.
- AuthLayout : logo cliquable vers l'accueil.

Vérifié : tsc --noEmit propre, npm run build propre, cargo build -p
tripoli-api propre.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 13:03:52 +02:00

13 lines
657 B
SQL

-- Recherche plein texte façon Spotlight : sur le nom du fichier *et* sur
-- son contenu extrait à l'upload (voir files::upload). Colonne générée
-- STORED plutôt que calculée à la volée dans chaque requête : l'index
-- GIN a besoin d'une colonne matérialisée pour être utilisable.
ALTER TABLE files ADD COLUMN content_text TEXT;
ALTER TABLE files ADD COLUMN search_vector tsvector
GENERATED ALWAYS AS (
setweight(to_tsvector('french', coalesce(filename, '')), 'A') ||
setweight(to_tsvector('french', coalesce(content_text, '')), 'B')
) STORED;
CREATE INDEX files_search_vector_idx ON files USING GIN (search_vector);