

Le comportement d'une configuration personnalisée de recherche plein texte peut facilement devenir confus. Les fonctions décrites dans cette section sont utiles pour tester les objets de recherche plein texte. Vous pouvez tester une configuration complète ou tester séparément analyseurs et dictionnaires.
    La fonction ts_debug permet un test facile d'une
    configuration de recherche plein texte.
   
ts_debug([configregconfig, ]documenttext, OUTaliastext, OUTdescriptiontext, OUTtokentext, OUTdictionariesregdictionary[], OUTdictionaryregdictionary, OUTlexemestext[]) returns setof record
    ts_debug affiche des informations sur chaque jeton d'un
    document tel qu'il est produit
    par l'analyseur et traité par les dictionnaires configurés. Elle utilise la
    configuration indiquée par config,
    ou default_text_search_config si cet argument est omis.
   
    ts_debug renvoie une ligne pour chaque jeton identifié
    dans le texte par l'analyseur. Les colonnes renvoyées sont :
    
       alias text  --  nom court
       du type de jeton
      
       description text  -- 
       description du type de jeton
      
       token text  --  texte du jeton
      
       dictionaries regdictionary[]  -- 
       les dictionnaires sélectionnés par la configuration pour ce type de jeton
      
       dictionary regdictionary  -- 
       le dictionnaire qui a reconnu le jeton, ou NULL dans
       le cas contraire
      
       lexemes text[]  --  le ou les
       lexèmes produits par le dictionnaire qui a reconnu le jeton, ou
       NULL dans le cas contraire ; un tableau vide
       ({}) signifie qu'il a été reconnu comme un terme
       courant
      
Voici un exemple simple :
SELECT * FROM ts_debug('english', 'a fat  cat sat on a mat - it ate a fat rats');
   alias   |   description   | token |  dictionaries  |  dictionary  | lexemes
-----------+-----------------+-------+----------------+--------------+---------
 asciiword | Word, all ASCII | a     | {english_stem} | english_stem | {}
 blank     | Space symbols   |       | {}             |              |
 asciiword | Word, all ASCII | fat   | {english_stem} | english_stem | {fat}
 blank     | Space symbols   |       | {}             |              |
 asciiword | Word, all ASCII | cat   | {english_stem} | english_stem | {cat}
 blank     | Space symbols   |       | {}             |              |
 asciiword | Word, all ASCII | sat   | {english_stem} | english_stem | {sat}
 blank     | Space symbols   |       | {}             |              |
 asciiword | Word, all ASCII | on    | {english_stem} | english_stem | {}
 blank     | Space symbols   |       | {}             |              |
 asciiword | Word, all ASCII | a     | {english_stem} | english_stem | {}
 blank     | Space symbols   |       | {}             |              |
 asciiword | Word, all ASCII | mat   | {english_stem} | english_stem | {mat}
 blank     | Space symbols   |       | {}             |              |
 blank     | Space symbols   | -     | {}             |              |
 asciiword | Word, all ASCII | it    | {english_stem} | english_stem | {}
 blank     | Space symbols   |       | {}             |              |
 asciiword | Word, all ASCII | ate   | {english_stem} | english_stem | {ate}
 blank     | Space symbols   |       | {}             |              |
 asciiword | Word, all ASCII | a     | {english_stem} | english_stem | {}
 blank     | Space symbols   |       | {}             |              |
 asciiword | Word, all ASCII | fat   | {english_stem} | english_stem | {fat}
 blank     | Space symbols   |       | {}             |              |
 asciiword | Word, all ASCII | rats  | {english_stem} | english_stem | {rat}
    
    Pour une démonstration plus importante, nous créons tout d'abord une
    configuration public.english et un dictionnaire
    ispell pour l'anglais :
   
CREATE TEXT SEARCH CONFIGURATION public.english ( COPY = pg_catalog.english );
CREATE TEXT SEARCH DICTIONARY english_ispell (
    TEMPLATE = ispell,
    DictFile = english,
    AffFile = english,
    StopWords = english
);
ALTER TEXT SEARCH CONFIGURATION public.english
   ALTER MAPPING FOR asciiword WITH english_ispell, english_stem;
   
SELECT * FROM ts_debug('public.english', 'The Brightest supernovaes');
   alias   |   description   |    token    |         dictionaries          |   dictionary   |   lexemes
-----------+-----------------+-------------+-------------------------------+----------------+-------------
 asciiword | Word, all ASCII | The         | {english_ispell,english_stem} | english_ispell | {}
 blank     | Space symbols   |             | {}                            |                |
 asciiword | Word, all ASCII | Brightest   | {english_ispell,english_stem} | english_ispell | {bright}
 blank     | Space symbols   |             | {}                            |                |
 asciiword | Word, all ASCII | supernovaes | {english_ispell,english_stem} | english_stem   | {supernova}
   
    Dans cet exemple, le mot Brightest a été reconnu par
    l'analyseur comme un mot ASCII (alias
    asciiword). Pour ce type de jeton, la liste de dictionnaire
    est english_ispell et english_stem. Le
    mot a été reconnu par english_ispell, qui l'a réduit avec
    le mot bright. Le mot supernovaes est
    inconnu dans le dictionnaire english_ispell donc il
    est passé au dictionnaire suivant et, heureusement, est reconnu (en fait,
    english_stem est un dictionnaire Snowball qui reconnaît
    tout ; c'est pourquoi il est placé en dernier dans la liste des
    dictionnaires).
   
    Le mot The est reconnu par le dictionnaire
    english_ispell comme étant un terme courant (Section 12.6.1) et n'est donc pas indexé. Les espaces
    sont aussi ignorées, car la configuration ne fournit aucun dictionnaire
    pour eux.
   
Vous pouvez réduire le volume en sortie en spécifiant explicitement les colonnes que vous voulez voir :
SELECT alias, token, dictionary, lexemes
FROM ts_debug('public.english', 'The Brightest supernovaes');
   alias   |    token    |   dictionary   |   lexemes
-----------+-------------+----------------+-------------
 asciiword | The         | english_ispell | {}
 blank     |             |                |
 asciiword | Brightest   | english_ispell | {bright}
 blank     |             |                |
 asciiword | supernovaes | english_stem   | {supernova}
    
Les fonctions suivantes permettent un test direct d'un analyseur de recherche plein texte.
ts_parse(parser_nametext,documenttext, OUTtokidinteger, OUTtokentext) returnssetof recordts_parse(parser_oidoid,documenttext, OUTtokidinteger, OUTtokentext) returnssetof record
    ts_parse analyse le document
    indiqué et renvoie une série d'enregistrements, un pour chaque jeton produit
    par l'analyse. Chaque enregistrement inclut un tokid
    montrant le type de jeton affecté et un jeton (token) qui
    est le texte dudit jeton. Par exemple :
    
SELECT * FROM ts_parse('default', '123 - a number');
 tokid | token
-------+--------
    22 | 123
    12 |
    12 | -
     1 | a
    12 |
     1 | number
    
ts_token_type(parser_nametext, OUTtokidinteger, OUTaliastext, OUTdescriptiontext) returnssetof recordts_token_type(parser_oidoid, OUTtokidinteger, OUTaliastext, OUTdescriptiontext) returnssetof record
    ts_token_type renvoie une table qui décrit chaque type
    de jeton que l'analyseur indiqué peut reconnaître. Pour chaque type de jeton,
    la table donne l'entier tokid que l'analyseur utilise pour
    labeliser un jeton de ce type, l'alias qui nomme le type
    de jeton dans les commandes de configuration et une courte
    description. Par exemple :
    
SELECT * FROM ts_token_type('default');
 tokid |      alias      |               description
-------+-----------------+------------------------------------------
     1 | asciiword       | Word, all ASCII
     2 | word            | Word, all letters
     3 | numword         | Word, letters and digits
     4 | email           | Email address
     5 | url             | URL
     6 | host            | Host
     7 | sfloat          | Scientific notation
     8 | version         | Version number
     9 | hword_numpart   | Hyphenated word part, letters and digits
    10 | hword_part      | Hyphenated word part, all letters
    11 | hword_asciipart | Hyphenated word part, all ASCII
    12 | blank           | Space symbols
    13 | tag             | XML tag
    14 | protocol        | Protocol head
    15 | numhword        | Hyphenated word, letters and digits
    16 | asciihword      | Hyphenated word, all ASCII
    17 | hword           | Hyphenated word, all letters
    18 | url_path        | URL path
    19 | file            | File or path name
    20 | float           | Decimal notation
    21 | int             | Signed integer
    22 | uint            | Unsigned integer
    23 | entity          | XML entity
    
    La fonction ts_lexize facilite le test des
    dictionnaires.
   
    ts_lexize(dict regdictionary, token text) returns text[]
   
    ts_lexize renvoie un tableau de lexèmes si le jeton
    (token) en entrée est connu du dictionnaire ou
    un tableau vide si le jeton est connu du dictionnaire en tant que terme
    courant, ou enfin NULL si le mot n'est pas connu.
   
Exemples :
SELECT ts_lexize('english_stem', 'stars');
 ts_lexize
-----------
 {star}
SELECT ts_lexize('english_stem', 'a');
 ts_lexize
-----------
 {}
    
     La fonction ts_lexize attend un seul jeton, pas du
     texte. Voici un cas où cela peut devenir source de confusion :
     
SELECT ts_lexize('thesaurus_astro', 'supernovae stars') is null;
 ?column?
----------
 t
     
     Le dictionnaire thésaurus thesaurus_astro connaît la
     phrase supernovae stars, mais
     ts_lexize échoue, car il ne peut pas analyser le texte
     en entrée, mais le traite bien en tant
     que simple jeton. Utilisez plainto_tsquery ou
     to_tsvector pour tester les dictionnaires thésaurus.
     Par exemple :
     
SELECT plainto_tsquery('supernovae stars');
 plainto_tsquery
-----------------
 'sn'