PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

tsvector suporta apenas inglês?


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