2013-08-08 16 views
6

Sadece bir sorunla karşılaşın. Yerelleştirilmiş içerikle (özellikle Rusça) tam metin araması yapmaya çalışıyorum. Sorun, varsayılan yapılandırma (benim özel yanı sıra) mektup durumları ile uğraşmaz. Örnek:Postgresql tam metin araması tokenizer

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

'На' bir sözcüktür ve kaldırılmalı, ancak sonuç vektöründe bile küçültülmez. Ben dize küçük harfli geçiren, tüm düzgün çalıştığını

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

ipleri önceden küçük harfli geçiren, ancak manuel

basit sözlük şablon harfe belirteç girişini dönüştürerek ve kontrol ederek çalışır diyor Emin bu bir durma kelimesi dosyasına karşı.

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; 

Ama aslında russian config yerleşik ile tam olarak aynı sonuçları elde:

Yapılandırma russian_test buna benzer.

Beklediğim gibi ts_debug ve jetonları word olarak denedim.

Herhangi bir fikrin var mı?

cevap

4

Sorun çözüldü. Nedeni veritabanı varsayılan ("C") CType ve Collate ile başlatıldı. Biz örneğini yeniden yaratmak için

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

kullanılan ve

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

db ve basit Sözlük şimdi çalışıyor yeniden.