Minęło trochę czasu, odkąd się tym bawiłem, ale musisz utworzyć wektor ts_vector w odpowiednim języku, a nie ts_query.
Więc kiedy aktualizujesz tabelę, użyj:
UPDATE blog_entry SET body_tsv=to_tsvector('german', body);
Możesz także rozszerzyć funkcjonalność i użyć słownika ispell, aby uczynić stemming lepszym dla wyszukiwarki tekstowej (chociaż nadal nie będzie tak wyrafinowany jak np. Solr)
W tym celu należy pobrać słownik ISPELL, czyli m.in. zawarte w niemieckim słowniku OpenOffice
Plik .oxt jest w rzeczywistości plikiem .zip, więc możesz po prostu wyodrębnić jego zawartość.
Następnie skopiuj plik de_DE_frami.dic
do katalogu "share/tsearch_data" PostgreSQL podczas zmiany rozszerzenia na .dict
(czego oczekuje PostgreSQL.
Następnie skopiuj plik de_DE_frami.aff
do tego samego katalogu, zmieniając rozszerzenie na .affix
.
Musisz przekonwertować oba pliki (tekstowe) na UTF-8, aby działały z PostgreSQL
Następnie zarejestruj ten słownik za 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;
Gdy to zrobisz, możesz utworzyć swój wektor ts_vector za pomocą:
UPDATE blog_entry SET body_tsv=to_tsvector('de_config', body);
Jest to również opisane w instrukcji:http ://www.postgresql.org/docs/current/static/textsearch-dictionaries.html#TEXTSEARCH-ISPELL-DICTIONARY