8

問題が発生するだけです。ローカライズされたコンテンツ (特にロシア語) で全文検索を設定しようとしています。問題は、デフォルトの構成 (および私のカスタム) が大文字と小文字を区別しないことです。例:

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 と tokens を として試してみましwordた。

何か案は?

4

1 に答える 1

4

問題が解決しました。その理由は、データベースがデフォルト (「C」)CTypeおよびで開始されたためですCollate。使用した

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

インスタンスを再作成し、

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

データベースを再作成し、単純な辞書が機能するようになりました。

于 2013-08-08T14:43:51.473 に答える