sql >> Base de Datos >  >> RDS >> PostgreSQL

tsvector solo admite inglés?

Ha pasado un tiempo desde que jugué con esto, pero necesitas crear el ts_vector en el idioma correcto, no el ts_query.

Entonces, cuando actualice su tabla, use:

UPDATE blog_entry SET body_tsv=to_tsvector('german', body);

También puede ampliar la funcionalidad y utilizar un diccionario ispell para mejorar la lematización del motor de búsqueda de texto (aunque no será tan sofisticado como, por ejemplo, Solr)

Para hacer eso, descargue el diccionario ISPELL que es, p. contenido en el Diccionario de alemán de OpenOffice

El archivo .oxt es en realidad un archivo .zip, por lo que simplemente puede extraer su contenido.

Luego copie el archivo de_DE_frami.dic al directorio "share/tsearch_data" de PostgreSQL mientras cambia la extensión a .dict (que es lo que espera PostgreSQL.

Luego copie el archivo de_DE_frami.aff al mismo directorio, cambiando la extensión a .affix .

Debe convertir ambos archivos (de texto) a UTF-8 para que funcionen con PostgreSQL

Luego registre ese diccionario 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 vez hecho esto, puede crear su ts_vector usando:

UPDATE blog_entry SET body_tsv=to_tsvector('de_config', body);

Esto también se describe en el manual:http ://www.postgresql.org/docs/current/static/textsearch-dictionaries.html#TEXTSEARCH-ISPELL-DICTIONARY