2013-08-08 14 views
6

問題が発生しました。ローカライズされたコンテンツ(特にロシア語)で全文検索を設定しようとしています。問題はデフォルト設定(私のカスタムと同様)が文字の場合を処理しないことです。例:Postgresql全文検索トークナイザ

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

'На'はストップワードであり、削除する必要がありますが、結果ベクタでも小文字ではありません。私は小文字の文字列を渡すと、すべてが正常に

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

簡単な辞書テンプレートは、下部ケースに トークンの入力を変換してチェックすることによって動作し、私は事前に小文字の文字列を渡すことができますが、マニュアルは

を言う確かに動作しますそれはストップワードのファイルに対して。

コンフィグrussian_testは次のようになります。

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; 

しかし、私は実際にビルトインrussian設定と全く同じ結果が得られます。

私は予想通り、ts_debugとトークンをwordとして扱いました。

アイデア?

答えて

4

問題を解決しました。その理由は、データベースがデフォルト( "C")CTypeCollateで開始されたためです。 我々が動作するようになりましたデシベルと簡単な辞書を再作成するために、インスタンスと

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

を再作成する

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

を使用。