È passato un po' di tempo dall'ultima volta che ci ho giocato, ma è necessario creare ts_vector nella lingua corretta, non ts_query.
Quindi, quando aggiorni la tua tabella, usa:
UPDATE blog_entry SET body_tsv=to_tsvector('german', body);
Puoi anche estendere la funzionalità e utilizzare un dizionario ispell per migliorare lo stemming nel motore di ricerca testuale (sebbene non sarà comunque sofisticato come ad es. Solr)
Per farlo, scarica il dizionario ISPELL che è ad es. contenuto nel Dizionario tedesco di OpenOffice
Il file .oxt è in realtà un file .zip, quindi puoi semplicemente estrarne il contenuto.
Quindi copia il file de_DE_frami.dic
nella directory "share/tsearch_data" di PostgreSQL modificando l'estensione in .dict
(che è ciò che si aspetta PostgreSQL.
Quindi copia il file de_DE_frami.aff
nella stessa directory, cambiando l'estensione in .affix
.
Devi convertire entrambi i file (di testo) in UTF-8 affinché funzionino con PostgreSQL
Quindi registra quel dizionario usando:
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;
Una volta fatto, puoi creare il tuo ts_vector usando:
UPDATE blog_entry SET body_tsv=to_tsvector('de_config', body);
Questo è anche descritto nel manuale:http ://www.postgresql.org/docs/current/static/textsearch-dictionaries.html#TEXTSEARCH-ISPELL-DICTIONARY