PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

tsvector supporta solo l'inglese?

È passato un po' di tempo dall'ultima volta che ci ho giocato, ma è necessario creare ts_vector nella lingua corretta, non ts_query.

Quindi, quando aggiorni la tua tabella, usa:

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

Puoi anche estendere la funzionalità e utilizzare un dizionario ispell per migliorare lo stemming nel motore di ricerca testuale (sebbene non sarà comunque sofisticato come ad es. Solr)

Per farlo, scarica il dizionario ISPELL che è ad es. contenuto nel Dizionario tedesco di OpenOffice

Il file .oxt è in realtà un file .zip, quindi puoi semplicemente estrarne il contenuto.

Quindi copia il file de_DE_frami.dic nella directory "share/tsearch_data" di PostgreSQL modificando l'estensione in .dict (che è ciò che si aspetta PostgreSQL.

Quindi copia il file de_DE_frami.aff nella stessa directory, cambiando l'estensione in .affix .

Devi convertire entrambi i file (di testo) in UTF-8 affinché funzionino con PostgreSQL

Quindi registra quel dizionario 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 volta fatto, puoi creare il tuo ts_vector usando:

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

Questo è anche descritto nel manuale:http ://www.postgresql.org/docs/current/static/textsearch-dictionaries.html#TEXTSEARCH-ISPELL-DICTIONARY