2013-08-08 5 views
6

Nur in ein Problem laufen. Ich versuche eine Volltextsuche für lokalisierten Inhalt (insbesondere Russisch) einzurichten. Das Problem ist, dass die Standardkonfiguration (wie auch meine Benutzerdefiniert) sich nicht mit Briefen befasst. Beispiel:Postgresql Volltextsuche Tokenizer

SELECT * from to_tsvector('test_russian', 'На рынке появились новые рублевые облигации'); 
> 'На':1 'новые':4 'облигации':6 'появились':3 'рублевые':5 'рынке':2 

'На' ist ein Stoppwort und sollte entfernt werden, aber es wird nicht im Ergebnisvektor gespeichert. Wenn ich Zeichenfolge kleingeschrieben passieren, funktioniert alles richtig

SELECT * from to_tsvector('test_russian', 'на рынке появились новые рублевые облигации'); 
> 'новые':4 'облигации':6 'появились':3 'рублевые':5 'рынке':2 

Sure I Strings vorgekleingeschrieben passieren kann, aber Handbuch sagt

Die einfache Wörterbuch Vorlage arbeitet durch die Eingabe-Token Umwandlung Fall zu senken und die Überprüfung es gegen eine Datei von Stoppwörtern.

Config russian_test sieht wie folgt aus:

create text search CONFIGURATION test_russian (COPY = 'russian'); 

CREATE TEXT SEARCH DICTIONARY russian_simple (
    TEMPLATE = pg_catalog.simple, 
    STOPWORDS = russian 
); 

CREATE TEXT SEARCH DICTIONARY russian_snowball (
    TEMPLATE = snowball, 
    Language = russian, 
    StopWords = russian 
); 

alter text search configuration test_russian 
    alter mapping for word 
    with russian_simple,russian_snowball; 

Aber ich habe eigentlich genau die gleichen Ergebnisse mit eingebautem in russian Konfig.

Ich versuchte ts_debug und Token als word behandelt, wie ich erwartet hatte.

Irgendwelche Ideen?

Antwort

4

Problem gelöst. Der Grund dafür ist, dass die Datenbank mit den Standardeinstellungen ("C") CType und Collate gestartet wurde. Wir haben

initdb --locale=UTF-8 --lc-collate=UTF-8 --encoding=UTF-8 -U pgsql *PGSQL DATA DIR* 

Instanz neu zu erstellen und

CREATE DATABASE "scratch" 
    WITH OWNER "postgres" 
    ENCODING 'UTF8' 
    LC_COLLATE = 'ru_RU.UTF-8' 
    LC_CTYPE = 'ru_RU.UTF-8'; 

db und einfaches Wörterbuch erstellen funktioniert jetzt.