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

12.5. Analyseurs

Les analyseurs de recherche plein texte sont responsables du découpage d'un document brut en jetons et d'identifier le type des jetons. L'ensemble des types possibles est défini par l'analyseur lui-même. Notez qu'un analyseur ne modifie pas le texte -- il identifie les limites plausibles des mots. Comme son domaine est limité, il est moins important de pouvoir construire des analyseurs personnalisés pour une application. Actuellement, PostgreSQL fournit un seul analyseur interne qui s'est révélé utile pour un ensemble varié d'applications.

L'analyseur interne est nommé pg_catalog.default. Il reconnait 23 types de jeton, dont la liste est disponible dans Tableau 12.1.

Tableau 12.1. Types de jeton de l'analyseur par défaut

AliasDescriptionExemple
asciiwordMot, toute lettre ASCIIelephant
wordMot, toute lettremañana
numwordMot, lettres et chiffresbeta1
asciihwordMot composé, en ASCIIup-to-date
hwordMot composé, toutes les lettreslógico-matemática
numhwordMot composé, lettre et chiffrepostgresql-beta1
hword_asciipartPartie d'un mot composé, en ASCIIpostgresql dans le contexte postgresql-beta1
hword_partPartie d'un mot composé, toutes les lettreslógico ou matemática dans le contexte lógico-matemática
hword_numpartPartie d'un mot composé, lettres et chiffresbeta1 dans le contexte postgresql-beta1
emailAdresse emailfoo@example.com
protocolEn-tête de protocolehttp://
urlURLexample.com/stuff/index.html
hostHôteexample.com
url_pathChemin URL/stuff/index.html, dans le contexte d'une URL
fileFichier ou chemin/usr/local/foo.txt, en dehors du contexte d'une URL
sfloatNotation scientifique-1.234e56
floatNotation décimale-1.234
intEntier signé-1234
uintEntier non signé1234
versionNuméro de version8.3.0
tagBalise XML<a href="dictionaries.html">
entityEntité XML&amp;
blankSymboles espaces(tout espace blanc, ou signe de ponctuation non reconnu autrement)

Note

La notion de l'analyseur d'une « lettre » est déterminée par la configuration de la locale sur la base de données, spécifiquement par lc_ctype. Les mots contenant seulement des lettres ASCII basiques sont reportés comme un type de jeton séparé, car il est parfois utile de les distinguer. Dans la plupart des langues européennes, les types de jeton word et asciiword doivent toujours être traités de la même façon.

email ne supporte pas tous les caractères email valides tels qu'ils sont définis par la RFC 5322. Spécifiquement, les seuls caractères non alphanumériques supportés sont le point, le tiret et le tiret bas.

Il est possible que l'analyseur produise des jetons qui coïncident à partir du même texte. Comme exemple, un mot composé peut être reporté à la fois comme un mot entier et pour chaque composante :

SELECT alias, description, token FROM ts_debug('foo-bar-beta1');
      alias      |               description                |     token
-----------------+------------------------------------------+---------------
 numhword        | Hyphenated word, letters and digits      | foo-bar-beta1
 hword_asciipart | Hyphenated word part, all ASCII          | foo
 blank           | Space symbols                            | -
 hword_asciipart | Hyphenated word part, all ASCII          | bar
 blank           | Space symbols                            | -
 hword_numpart   | Hyphenated word part, letters and digits | beta1
   

Ce comportement est souhaitable, car il autorise le bon fonctionnement de la recherche sur le mot composé et sur les composants. Voici un autre exemple instructif :

SELECT alias, description, token FROM ts_debug('http://example.com/stuff/index.html');
  alias   |  description  |            token
----------+---------------+------------------------------
 protocol | Protocol head | http://
 url      | URL           | example.com/stuff/index.html
 host     | Host          | example.com
 url_path | URL path      | /stuff/index.html