PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

tsvector unterstützt nur Englisch?

Es ist schon eine Weile her, seit ich damit gespielt habe, aber Sie müssen den ts_vector in der richtigen Sprache erstellen, nicht die ts_query.

Wenn Sie also Ihre Tabelle aktualisieren, verwenden Sie:

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

Sie können auch die Funktionalität erweitern und ein ispell-Wörterbuch verwenden, um die Wortstammerkennung für die Textsuchmaschine zu verbessern (obwohl es immer noch nicht so ausgefeilt sein wird wie z. B. Solr)

Laden Sie dazu das ISPELL-Wörterbuch herunter, das z. enthalten im OpenOffice Deutsch-Wörterbuch

Die .oxt-Datei ist eigentlich eine .zip-Datei, sodass Sie ihren Inhalt einfach extrahieren können.

Kopieren Sie dann die Datei de_DE_frami.dic in das PostgreSQL-Verzeichnis „share/tsearch_data“, während Sie die Erweiterung in .dict ändern (was PostgreSQL erwartet.

Kopieren Sie dann die Datei de_DE_frami.aff in dasselbe Verzeichnis und ändern Sie die Erweiterung in .affix .

Sie müssen beide (Text-)Dateien in UTF-8 konvertieren, damit sie mit PostgreSQL funktionieren

Dann registrieren Sie dieses Wörterbuch mit:

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;

Sobald dies erledigt ist, können Sie Ihren ts_vector erstellen mit:

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

Dies ist auch im Handbuch beschrieben:http ://www.postgresql.org/docs/current/static/textsearch-dictionaries.html#TEXTSEARCH-ISPELL-DICTIONARY