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

tsvector understøtter kun engelsk?

Det er et stykke tid siden, jeg har leget med dette, men du skal oprette ts_vector på det korrekte sprog, ikke ts_query.

Så når du opdaterer din tabel, skal du bruge:

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

Du kan også udvide funktionaliteten og bruge en ispell-ordbog til at gøre stemming bedre til tekstsøgemaskinen (selvom den stadig ikke vil være så sofistikeret som f.eks. Solr)

For at gøre det skal du downloade ISPELL-ordbogen, der er f.eks. indeholdt i OpenOffice tysk ordbog

.oxt-filen er faktisk en .zip-fil, så du kan blot udpakke dens indhold.

Kopier derefter filen de_DE_frami.dic til PostgreSQL "share/tsearch_data"-biblioteket, mens du ændrer udvidelsen til .dict (hvilket er, hvad PostgreSQL forventer.

Kopier derefter filen de_DE_frami.aff til den samme mappe, ændre udvidelsen til .affix .

Du skal konvertere begge (tekst)filer til UTF-8, for at de kan fungere med PostgreSQL

Registrer derefter den ordbog ved hjælp af:

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;

Når det er gjort, kan du oprette din ts_vector ved hjælp af:

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

Dette er også beskrevet i manualen:http ://www.postgresql.org/docs/current/static/textsearch-dictionaries.html#TEXTSEARCH-ISPELL-DICTIONARY



  1. MySQL:Kopier tabel til en anden tabel med en ekstra kolonne

  2. Hvordan virker indre forening på et mange-til-mange forhold ved hjælp af Doctrine og Symfony2

  3. Rekursive CTE sammenkæder felter med forældre fra et vilkårligt punkt

  4. Brug af Oracle JDeveloper med MySQL-databasetjeneste på Oracle Cloud Platform, del 3