dict_int
est un exemple de modèle de dictionnaire pour
la recherche plein texte. La création de ce dictionnaire à été motivée par la
volonté de pouvoir contrôler l'indexage d'entiers (signés et non signés),
pour permettre à de tels nombres d'être indexés sans
grossissement excessif du nombre de mots uniques, ce qui affecte
grandement la performance de la recherche.
Ce module est considéré comme « trusted », ce qui signifie qu'il
peut être installé par des utilisateurs simples (sans attribut
SUPERUSER
) et qui ont l'attribut CREATE
sur la base de données courante.
Le dictionnaire accepte trois options :
le paramètre maxlen
indique le nombre maximum de
chiffres autorisés dans un mot de type entier. La valeur par défaut
est 6 ;
Le paramètre rejectlong
précise si un entier trop
long doit être tronqué ou ignoré. Si rejectlong
vaut
false
(valeur par défaut), le dictionnaire renvoie
les maxlen
premiers chiffres de l'entier. Si
rejectlong
vaut true
, le
dictionnaire traite l'entier comme un terme courant, l'entier n'est
donc pas indexé. Cela signifie aussi qu'un tel nombre ne peut
pas être recherché.
Le paramètre absval
spécifie si les signes
« +
» ou « -
»
au début doivent être supprimés des entiers. Par défaut, la valeur est
false
. Quand la valeur vaut true
, le signe
est supprimé avant que maxlen
soit appliquée.
Installer l'extension dict_int
crée un modèle de recherche plein
texte intdict_template
et un dictionnaire
intdict
basé sur ce dernier avec les paramètres par
défaut. Les paramètres peuvent être modifiés, par exemple :
mabase# ALTER TEXT SEARCH DICTIONARY intdict (MAXLEN = 4, REJECTLONG = true); ALTER TEXT SEARCH DICTIONARY
ou créez de nouveaux dictionnaires à partir du modèle.
Pour tester le dictionnaire :
mydb# select ts_lexize('intdict', '12345678'); ts_lexize ----------- {123456}
mais une utilisation réelle nécessite de l'inclure dans une configuration de recherche plein texte comme celle décrite dans Chapitre 12. Cela peut ressembler à ceci :
ALTER TEXT SEARCH CONFIGURATION english ALTER MAPPING FOR int, uint WITH intdict;