Já faz um tempo que não brinquei com isso, mas você precisa criar o ts_vector no idioma correto, não o ts_query.
Então, quando você atualizar sua tabela, use:
UPDATE blog_entry SET body_tsv=to_tsvector('german', body);
Você também pode estender a funcionalidade e usar um dicionário ispell para tornar a derivação melhor para o mecanismo de pesquisa de texto (embora ainda não seja tão sofisticado quanto, por exemplo, Solr)
Para fazer isso, baixe o dicionário ISPELL que é, por exemplo, contido no dicionário de alemão do OpenOffice
O arquivo .oxt é na verdade um arquivo .zip, então você pode simplesmente extrair seu conteúdo.
Em seguida, copie o arquivo
de_DE_frami.dic
para o diretório "share/tsearch_data" do PostgreSQL enquanto altera a extensão para .dict
(que é o que o PostgreSQL espera. Em seguida, copie o arquivo
de_DE_frami.aff
para o mesmo diretório, alterando a extensão para .affix
. Você precisa converter ambos os arquivos (texto) para UTF-8 para que funcionem com o PostgreSQL
Em seguida, registre esse dicionário 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;
Feito isso, você pode criar seu ts_vector usando:
UPDATE blog_entry SET body_tsv=to_tsvector('de_config', body);
Isso também está descrito no manual:http ://www.postgresql.org/docs/current/static/textsearch-dictionaries.html#TEXTSEARCH-ISPELL-DICTIONARY