Une configuration de recherche plein texte précise toutes les options nécessaires pour transformer un document en un tsvector : le planificateur à utiliser pour diviser le texte en jetons, et les dictionnaires à utiliser pour transformer chaque jeton en un lexème. Chaque appel à to_tsvector ou to_tsquery a besoin d'une configuration de recherche plein texte pour réaliser le traitement. Le paramètre de configuration default_text_search_config indique le nom de la configuration par défaut, celle utilisée par les fonctions de recherche plein texte si un paramètre explicite de configuration est oublié. Il se configure soit dans postgresql.conf soit dans une session individuelle en utilisant la commande SET.
Plusieurs configurations de recherche plein texte prédéfinies sont disponibles et vous pouvez créer des versions personnalisées facilement. Pour faciliter la gestion des objets de recherche plein texte, un ensemble de commandes SQL est disponible, et il existe plusieurs commandes psql affichant des informations sur les objets de la recherche plein texte (Section 12.10, « Support de psql »).
Comme exemple, nous allons créer une configuration pg en commençant à partir d'une duplication de la configuration english.
CREATE TEXT SEARCH CONFIGURATION public.pg ( COPY = pg_catalog.english );
Nous allons utiliser une liste de synonymes spécifique à PostgreSQL et nous allons la stocker dans $SHAREDIR/tsearch_data/pg_dict.syn. Le contenu du fichier ressemble à ceci :
postgres pg pgsql pg postgresql pg
Nous définissons le dictionnaire des synonymes ainsi :
CREATE TEXT SEARCH DICTIONARY pg_dict ( TEMPLATE = synonym, SYNONYMS = pg_dict );
Ensuite, nous enregistrons le dictionnaire Ispell™ english_ispell qui a ses propres fichiers de configuration :
CREATE TEXT SEARCH DICTIONARY english_ispell ( TEMPLATE = ispell, DictFile = english, AffFile = english, StopWords = english );
Maintenant, nous configurons la correspondance des mots dans la configuration pg :
ALTER TEXT SEARCH CONFIGURATION pg ALTER MAPPING FOR asciiword, asciihword, hword_asciipart, word, hword, hword_part WITH pg_dict, english_ispell, english_stem;
Nous choisissons de ne pas indexer certains types de jeton que la configuration par défaut peut gérer :
ALTER TEXT SEARCH CONFIGURATION pg DROP MAPPING FOR email, url, url_path, sfloat, float;
Maintenant, nous pouvons tester notre configuration :
SELECT * FROM ts_debug('public.pg', ' PostgreSQL, the highly scalable, SQL compliant, open source object-relational database management system, is now undergoing beta testing of the next version of our software. ');
La prochaine étape est d'initialiser la session pour utiliser la nouvelle configuration qui était créée dans le schéma public :
=> \dF List of text search configurations Schema | Name | Description ---------+------+------------- public | pg | SET default_text_search_config = 'public.pg'; SET SHOW default_text_search_config; default_text_search_config ---------------------------- public.pg