PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 12.18 » Langage SQL » Fonctions et opérateurs » Fonctions et opérateurs de la recherche plein texte

9.13. Fonctions et opérateurs de la recherche plein texte

Tableau 9.41, Tableau 9.42 et Tableau 9.43 résument les fonctions et les opérateurs fournis pour la recherche plein texte. Voir Chapitre 12 pour une explication détaillée sur la fonctionnalité de recherche plein texte de PostgreSQL.

Tableau 9.41. Opérateurs de recherche plein texte

OpérateurReturn TypeDescriptionExempleRésultat
@@ booleantsvector correspond à tsquery ?to_tsvector('fat cats ate rats') @@ to_tsquery('cat & rat')t
@@@ booleansynonyme obsolète de @@to_tsvector('fat cats ate rats') @@@ to_tsquery('cat & rat')t
|| tsvectorconcatène tsvectors'a:1 b:2'::tsvector || 'c:1 d:2 b:3'::tsvector'a':1 'b':2,5 'c':3 'd':4
&& tsqueryET logique des tsquery'fat | rat'::tsquery && 'cat'::tsquery( 'fat' | 'rat' ) & 'cat'
|| tsqueryOU logique des tsquery'fat | rat'::tsquery || 'cat'::tsquery( 'fat' | 'rat' ) | 'cat'
!! tsqueryinverse une tsquery!! 'cat'::tsquery!'cat'
<-> tsquerytsquery suivi par tsqueryto_tsquery('fat') <-> to_tsquery('rat')'fat' <-> 'rat'
@> booleantsquery en contient une autre ?'cat'::tsquery @> 'cat & rat'::tsqueryf
<@ tsquery est contenu dans ?'cat'::tsquery <@ 'cat & rat'::tsqueryt 

Note

Les opérateurs de confinement de tsquery considèrent seulement les lexèmes listés dans les deux requêtes, ignorant les opérateurs de combinaison.

En plus des opérateurs présentés dans la table, les opérateurs de comparaison B-tree habituels (=, <, etc.) sont définis pour les types tsvector et tsquery. Ils ne sont pas très utiles dans le cadre de la recherche plein texte, mais permettent la construction d'index d'unicité sur ces types de colonnes.

Tableau 9.42. Fonctions de la recherche plein texte

FonctionType de retourDescriptionExempleRésultat
array_to_tsvector(text[]) tsvectorconvertit un tableau de lexèmes en tsvectorarray_to_tsvector('{fat,cat,rat}'::text[])'cat' 'fat' 'rat'
get_current_ts_config() regconfigrécupère la configuration par défaut de la recherche plein texteget_current_ts_config()english
length(tsvector) integernombre de lexèmes dans tsvectorlength('fat:2,4 cat:3 rat:5A'::tsvector)3
numnode(tsquery) integernombre de lexèmes et d'opérateurs dans tsquery numnode('(fat & rat) | cat'::tsquery)5
plainto_tsquery([ config regconfig , ] requête text) tsqueryproduit un tsquery en ignorant la ponctuationplainto_tsquery('english', 'The Fat Rats')'fat' & 'rat'
phraseto_tsquery([ config regconfig , ] query text) tsqueryproduit un tsquery qui recherche une phrase en ignorant la ponctuationphraseto_tsquery('english', 'The Fat Rats')'fat' <-> 'rat'
websearch_to_tsquery([ config regconfig , ] query text) tsqueryproduit une tsquery à partir d'une requête style recherche webwebsearch_to_tsquery('english', '"fat rat" or rat')'fat' <-> 'rat' | 'rat'
querytree(requête tsquery) textrécupère la partie indexable d'un tsqueryquerytree('foo & ! bar'::tsquery)'foo'
setweight(vector tsvector, weight "char") tsvectoraffecte weight à chaque élément de vectorsetweight('fat:2,4 cat:3 rat:5B'::tsvector, 'A')'cat':3A 'fat':2A,4A 'rat':5A
setweight(vector tsvector, weight "char", lexemes text[]) tsvectoraffecte weight aux éléments de vector qui sont listés dans lexemessetweight('fat:2,4 cat:3 rat:5B'::tsvector, 'A', '{cat,rat}')'cat':3A 'fat':2,4 'rat':5A
strip(tsvector) tsvectorsupprime les positions et les poids du tsvectorstrip('fat:2,4 cat:3 rat:5A'::tsvector)'cat' 'fat' 'rat'
to_tsquery([ config regconfig , ] requête text) tsquerynormalise les mots et les convertit en un tsqueryto_tsquery('english', 'The & Fat & Rats')'fat' & 'rat'
to_tsvector([ config regconfig , ] document text) tsvectorréduit le texte du document en un tsvectorto_tsvector('english', 'The Fat Rats')'fat':2 'rat':3
to_tsvector([ config regconfig , ] document json(b)) tsvector réduit chaque valeur texte dans le document à un tsvector, puis les concatène dans l'ordre du document pour produire un seul tsvector to_tsvector('english', '{"a": "The Fat Rats"}'::json)'fat':2 'rat':3
json(b)_to_tsvector([ config regconfig, ] document json(b), filter json(b)) tsvector réduit chaque valeur du document, spécifié par filter vers un tsvector, puis concatène ces derniers dans un document pour produire un seul tsvector. filter est un tableau jsonb qui énumère le type d'éléments à inclure dans le tsvector en résultat. Les valeurs possibles pour filter sont "string" (pour inclure toutes les valeurs de type chaîne de caractères), "numeric" (pour inclure toutes les valeurs numériques dans le format chaîne), "boolean" (pour inclure toutes les valeurs booléennes dans le format chaîne "true"/"false"), "key" (pour inclure toutes les clés) ou "all" (pour les inclure toutes). Ces valeurs peuvent être combinées ensemble pour inclure, par exemple, toutes les valeurs de type chaînes de caractères et numériques. json_to_tsvector('english', '{"a": "The Fat Rats", "b": 123}'::json, '["string", "numeric"]')'123':5 'fat':2 'rat':3
ts_delete(vector tsvector, lexeme text) tsvectorsupprime le lexeme donné à partir de vectorts_delete('fat:2,4 cat:3 rat:5A'::tsvector, 'fat')'cat':3 'rat':5A
ts_delete(vector tsvector, lexemes text[]) tsvectorsupprime toute occurrence de lexèmes dans lexemes à partir de vectorts_delete('fat:2,4 cat:3 rat:5A'::tsvector, ARRAY['fat','rat'])'cat':3
ts_filter(vector tsvector, weights "char"[]) tsvectorsélectionne seulement les éléments du weights indiqué à partir de vectorts_filter('fat:2,4 cat:3b rat:5A'::tsvector, '{a,b}')'cat':3B 'rat':5A
ts_headline([ config regconfig, ] document text, requête tsquery [, options text ]) textaffiche une correspondance avec la requêtets_headline('x y z', 'z'::tsquery)x y <b>z</b>
ts_headline([ config regconfig, ] document json(b), query tsquery [, options text ]) textaffiche une correspondance de requêtets_headline('{"a":"x y z"}'::json, 'z'::tsquery){"a":"x y <b>z</b>"}
ts_rank([ poids float4[], ] vecteur tsvector, requête tsquery [, normalization integer ]) float4renvoie le score d'un document pour une requêtets_rank(textsearch, query)0.818
ts_rank_cd([ weights float4[], ] vector tsvector, requête tsquery [, normalization integer ]) float4renvoie le score d'un document pour une requête en utilisant une densité personnaliséets_rank_cd('{0.1, 0.2, 0.4, 1.0}', textsearch, query)2.01317
ts_rewrite(requête tsquery, cible tsquery, substitution tsquery) tsqueryremplace target avec substitute dans la requêtets_rewrite('a & b'::tsquery, 'a'::tsquery, 'foo|bar'::tsquery)'b' & ( 'foo' | 'bar' )
ts_rewrite(requête tsquery, select text)tsqueryremplace en utilisant les cibles et substitutions à partir d'une commande SELECTSELECT ts_rewrite('a & b'::tsquery, 'SELECT t,s FROM aliases')'b' & ( 'foo' | 'bar' )
tsquery_phrase(query1 tsquery, query2 tsquery) tsquerycrée la requête qui recherche query1 suivi par query2 (identique à l'opérateur <->)tsquery_phrase(to_tsquery('fat'), to_tsquery('cat'))'fat' <-> 'cat'
tsquery_phrase(query1 tsquery, query2 tsquery, distance integer) tsquerycrée la requête qui recherche query1 suivi par query2 à une distance maximale de distancetsquery_phrase(to_tsquery('fat'), to_tsquery('cat'), 10)'fat' <10> 'cat'
tsvector_to_array(tsvector) text[]convertit tsvector en un tableau de lexèmestsvector_to_array('fat:2,4 cat:3 rat:5A'::tsvector){cat,fat,rat}
tsvector_update_trigger() triggerfonction déclencheur pour la mise à jour automatique de colonne tsvectorCREATE TRIGGER ... tsvector_update_trigger(tsvcol, 'pg_catalog.swedish', title, body)
tsvector_update_trigger_column() triggerfonction déclencheur pour la mise à jour automatique de colonne tsvectorCREATE TRIGGER ... tsvector_update_trigger_column(tsvcol, configcol, title, body)
unnest(tsvector, OUT lexeme text, OUT positions smallint[], OUT weights text) setof recordétend un tsvector en un ensemble de lignesunnest('fat:2,4 cat:3 rat:5A'::tsvector)(cat,{3},{D}) ...

Note

Toutes les fonctions de recherche plein texte qui acceptent un argument regconfig optionnel utilisent la configuration indiquée par default_text_search_config en cas d'omission de cet argument.

Les fonctions de Tableau 9.43 sont listées séparément, car elles ne font pas partie des fonctions utilisées dans les opérations de recherche plein texte de tous les jours. Elles sont utiles pour le développement et le débogage de nouvelles configurations de recherche plein texte.

Tableau 9.43. Fonctions de débogage de la recherche plein texte

FonctionType de retourDescriptionExempleRésultat
ts_debug([ config regconfig, ] document text, OUT alias text, OUT description text, OUT token text, OUT dictionaries regdictionary[], OUT dictionary regdictionary, OUT lexemes text[]) setof recordteste une configurationts_debug('english', 'The Brightest supernovaes')(asciiword,"Word, all ASCII",The,{english_stem},english_stem,{}) ...
ts_lexize(dict regdictionary, jeton text) text[]teste un dictionnairets_lexize('english_stem', 'stars'){star}
ts_parse(nom_analyseur text, document text, OUT tokid integer, OUT token text) setof recordteste un analyseurts_parse('default', 'foo - bar')(1,foo) ...
ts_parse(oid_analyseur oid, document text, OUT id_jeton integer, OUT jeton text)setof recordteste un analyseurts_parse(3722, 'foo - bar')(1,foo) ...
ts_token_type(parser_name text, OUT tokid integer, OUT alias text, OUT description text) setof recordobtient les types de jeton définis par l'analyseurts_token_type('default')(1,asciiword,"Word, all ASCII") ...
ts_token_type(oid_analyseur oid, OUT id_jeton integer, OUT alias text, OUT description text)setof recordobtient les types de jeton définis par l'analyseurts_token_type(3722)(1,asciiword,"Word, all ASCII") ...
ts_stat(sqlquery text, [ weights text, ] OUT word text, OUT ndoc integer, OUT nentry integer) setof recordobtient des statistiques sur une colonne tsvectorts_stat('SELECT vector from apod')(foo,10,15) ...