PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 10.19 » Langage SQL » Recherche plein texte » Exemple de configuration

12.7. Exemple de configuration

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

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