Les analyseurs de recherche plein texte sont responsable 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 :
Tableau 12.1. Types de jeton de l'analyseur par défaut
Alias | Description | Exemple |
---|---|---|
asciiword | Mot, toute lettre ASCII | elephant |
word | Mot, toute lettre | mañana |
numword | Mot, lettres et chiffres | beta1 |
asciihword | Mot composé, en ASCII | up-to-date |
hword | Mot composé, toutes les lettres | lógico-matemática |
numhword | Mot composé, lettre et chiffre | postgresql-beta1 |
hword_asciipart | Partie d'un mot composé, en ASCII | postgresql dans le contexte postgresql-beta1 |
hword_part | Partie d'un mot composé, toutes les lettres | lógico ou matemática dans le contexte lógico-matemática |
hword_numpart | Partie d'un mot composé, lettres et chiffres | beta1 dans le contexte postgresql-beta1 |
Adresse email | foo@example.com | |
protocol | En-tête de protocole | http:// |
url | URL | example.com/stuff/index.html |
host | Hôte | example.com |
url_path | Chemin URL | /stuff/index.html, in the context of a URL |
file | Fichier ou chemin | /usr/local/foo.txt, if not within a URL |
sfloat | Notation scientifique | -1.234e56 |
float | Notation décimale | -1.234 |
int | Entier signé | -1234 |
uint | Entier non signé | 1234 |
version | Numéro de version | 8.3.0 |
tag | Balise XML | <a href="dictionaries.html"> |
entity | Entité XML | & |
blank | Symboles espaces | (tout espace blanc, ou signe de ponctuation non reconnu autrement) |
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.
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