-- 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);