PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

tsvector ne prend en charge que l'anglais ?

Cela fait un moment que je n'ai pas joué avec ça, mais vous devez créer le ts_vector dans la bonne langue, pas le ts_query.

Ainsi, lorsque vous mettez à jour votre tableau, utilisez :

UPDATE blog_entry SET body_tsv=to_tsvector('german', body);

Vous pouvez également étendre la fonctionnalité et utiliser un dictionnaire ispell pour améliorer la racine du moteur de recherche de texte (bien qu'il ne soit toujours pas aussi sophistiqué que, par exemple, Solr)

Pour ce faire, téléchargez le dictionnaire ISPELL qui est par ex. contenu dans le dictionnaire allemand OpenOffice

Le fichier .oxt est en fait un fichier .zip, vous pouvez donc simplement extraire son contenu.

Copiez ensuite le fichier de_DE_frami.dic au répertoire PostgreSQL "share/tsearch_data" tout en changeant l'extension en .dict (c'est ce que PostgreSQL attend.

Copiez ensuite le fichier de_DE_frami.aff dans le même répertoire, en changeant l'extension en .affix .

Vous devez convertir les deux fichiers (texte) en UTF-8 pour qu'ils fonctionnent avec PostgreSQL

Enregistrez ensuite ce dictionnaire en utilisant :

CREATE TEXT SEARCH CONFIGURATION de_config (copy=german);

CREATE TEXT SEARCH DICTIONARY german_stem (
    TEMPLATE = snowball,
    Language = german
);

CREATE TEXT SEARCH DICTIONARY german_ispell (
    TEMPLATE = ispell,
    dictfile = de_DE_frami,
    afffile = de_de_frami
);

alter text search configuration de_config 
     alter mapping for asciiword WITH german_ispell, german_stem;

Une fois cela fait, vous pouvez créer votre ts_vector en utilisant :

UPDATE blog_entry SET body_tsv=to_tsvector('de_config', body);

Ceci est également décrit dans le manuel :http ://www.postgresql.org/docs/current/static/textsearch-dictionaries.html#TEXTSEARCH-ISPELL-DICTIONARY