PostgreSQLLa base de données la plus sophistiquée au monde.

F.30. test_parser

test_parser est un exemple d'analyseur personnalisé pour la recherche plein texte. Il ne fait rien de particulièrement utile mais peut servir comme point de départ pour développer votre propre analyseur.

test_parser reconnaît les mots séparés par des espaces blancs, et renvoie simplement deux types de jeton :

mydb=# SELECT * FROM ts_token_type('testparser');
 tokid | alias |  description
-------+-------+---------------
     3 | word  | Word
    12 | blank | Space symbols
(2 rows)

Ces nombres jeton ont été choisis pour être compatible avec la numération par défaut de l'analyseur. Ceci nous permet d'utiliser sa fonction headline(), conservant du coup l'exemple simple.

F.30.1. Usage

Exécuter le script d'installation crée un analyseur de recherche plein texte nommé testparser. Il n'utilise pas de paramètres configurables.

Vous pouvez tester l'analyseur avec, par exemple :

mydb=# SELECT * FROM ts_parse('testparser', 'That''s my first own parser');
 tokid | token
-------+--------
     3 | That's
    12 |
     3 | my
    12 |
     3 | first
    12 |
     3 | own
    12 |
     3 | parser

Une utilisation réelle nécessite le paramétrage d'une configuration de recherche plein texte qui utilise cet analyseur. Par exemple :

mydb=# CREATE TEXT SEARCH CONFIGURATION testcfg ( PARSER = testparser );
CREATE TEXT SEARCH CONFIGURATION

mydb=# ALTER TEXT SEARCH CONFIGURATION testcfg
mydb-#   ADD MAPPING FOR word WITH english_stem;
ALTER TEXT SEARCH CONFIGURATION

mydb=#  SELECT to_tsvector('testcfg', 'That''s my first own parser');
          to_tsvector
-------------------------------
 'that':1 'first':3 'parser':5
(1 row)

mydb=# SELECT ts_headline('testcfg', 'Supernovae stars are the brightest phenomena in galaxies',
mydb(#                    to_tsquery('testcfg', 'star'));
                           ts_headline
-----------------------------------------------------------------
 Supernovae <b>stars</b> are the brightest phenomena in galaxies
(1 row)