Tous les termes du glossaire

Recherche plein texte

Comment fonctionne la recherche plein texte dans PostgreSQL ?

La recherche plein texte fait correspondre les documents par mots plutôt que par sous-chaînes exactes, à l’aide de tsvector, de tsquery et de l’opérateur @@. Un index GIN la rend rapide.

La recherche plein texte intégrée de PostgreSQL découpe les documents en jetons, les normalise en lexèmes (par exemple en réduisant les mots à leur racine) et stocke le résultat sous forme de tsvector. Une requête de recherche est un tsquery, et l’opérateur @@ teste si un document y correspond.

Une configuration de recherche textuelle comme english détermine comment le texte est découpé en mots, quels mots courants sont ignorés et comment fonctionne la racinisation. Des fonctions de classement comme ts_rank ordonnent les résultats par pertinence. Pour accélérer les recherches, indexez l’expression tsvector avec GIN, et employez dans vos requêtes la même configuration que dans l’index.

Exemple

L’exemple indexe le texte des articles sous forme de tsvector et trouve les lignes qui contiennent à la fois search et postgres. Seul l’article 1 correspond.

CREATE TABLE articles (id int PRIMARY KEY, body text NOT NULL);
INSERT INTO articles VALUES
  (1, 'Postgres supports full text search with tsvector and tsquery'),
  (2, 'Indexes make lookups fast');

CREATE INDEX articles_fts ON articles USING gin (to_tsvector('english', body));

SELECT id
FROM articles
WHERE to_tsvector('english', body) @@ to_tsquery('english', 'search & postgres');

Du SQL simple pour PostgreSQL 16 ou 17 standard, sans aucune extension. Exécutez-le dans une base de données vide que vous pouvez jeter ensuite.

Références

Documentation officielle de PostgreSQL (en anglais).

Termes associés