Už je to nějaký čas, co jsem si s tím hrál, ale musíte vytvořit ts_vector ve správném jazyce, ne ts_query.
Když tedy aktualizujete tabulku, použijte:
UPDATE blog_entry SET body_tsv=to_tsvector('german', body);
Můžete také rozšířit funkcionalitu a použít slovník ispell, aby bylo stemming lepší pro textový vyhledávač (i když stále nebude tak sofistikovaný jako např. Solr)
Chcete-li to provést, stáhněte si slovník ISPELL, který je např. obsažené v OpenOffice německém slovníku
Soubor .oxt je ve skutečnosti soubor .zip, takže jeho obsah můžete jednoduše extrahovat.
Poté zkopírujte soubor de_DE_frami.dic
do adresáře PostgreSQL "share/tsearch_data" při změně přípony na .dict
(což PostgreSQL očekává.
Poté zkopírujte soubor de_DE_frami.aff
do stejného adresáře, změnou přípony na .affix
.
Musíte převést oba (textové) soubory do UTF-8, aby fungovaly s PostgreSQL
Poté zaregistrujte tento slovník pomocí:
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;
Jakmile to uděláte, můžete vytvořit svůj ts_vector pomocí:
UPDATE blog_entry SET body_tsv=to_tsvector('de_config', body);
Toto je také popsáno v příručce:http ://www.postgresql.org/docs/current/static/textsearch-dictionaries.html#TEXTSEARCH-ISPELL-DICTIONARY