Re: tsearch2 и unicode - Mailing list pgsql-ru-general

From Nikolay Samokhvalov
Subject Re: tsearch2 и unicode
Date
Msg-id e431ff4c0701030446r6ee8d347kc62ac3113697e87c@mail.gmail.com
Whole thread Raw
In response to tsearch2 и unicode  ("Evgeny M. Baldin" <E.M.Baldin@inp.nsk.su>)
List pgsql-ru-general
pg_ts_cfg - в Ваших распоряжении, Вам надо только проапдейтить её :-)
указав таким образом, какая рабочая кодировка используется.

Вот пример создания рабочей конфигурации "с нуля" (кстати, как раз
UTF-8): http://www.sai.msu.su/~megera/wiki/pgweb_cfg

On 1/3/07, Evgeny M. Baldin <E.M.Baldin@inp.nsk.su> wrote:
> Добрый день
>
>   Преамбула: пытаюсь настроить русский полнотекстный поиск в MediaWiki
> (wiki-движок который используется в Википедии) с использование в
> качестве хранилища PostgreSQL версии 8.1.4
>
>   Амбула: MediaWiki пишет текст всегда в UTF8, поэтому, естественно
> настроить tsearch2, чтобы работал с unicode. Для этого собрал и установил
> tsearch2 из PostgreSQL 8.2 (tsearch2.82.tar.gz с официального сайта
> tsearch2), который поддерживает UTF-8. Сделал initdb с ключиком
> --locale=ru_RU.UTF-8
>
>   Возникло непонимание:
>
> wikidb=# show lc_collate;
>   lc_collate
> -------------
>   ru_RU.UTF-8
> (1 row)
>
> wikidb=# select * from pg_ts_cfg;
> ts_name     | prs_name |    locale
> -----------------+----------+--------------
>   default_russian | default  | ru_RU.KOI8-R
>   utf8_russian    | default  | ru_RU.UTF-8
>   simple          | default  |
>   default         | default  | ru_RU.UTF-8
> (4 rows)
>
>
> Есть некое текстовое поле old_text в таблице mediawiki.pagecontent -
> запись в UTF8, а клиент у меня в koi8, поэтому для отображения использую
> convert
>
> wikidb=# select convert(old_text,'UTF8','KOI8'),
>    to_tsvector(old_text) from mediawiki.pagecontent
>    where old_id=1500;
>
>     convert   | to_tsvector
> -------------+-------------
>   proba проба | 'proba':1
> (1 row)
>
> ! В результате индексируется только латиница
>
> Аналогичную процедуру сделал когда initdb запускалась с ключиком
> --locale=ru_RU.KOI8-R
>
> wikidb=# show lc_collate;
>    lc_collate
> --------------
>   ru_RU.KOI8-R
>
> wikidb=# select * from pg_ts_cfg;
> ts_name     | prs_name |    locale
> -----------------+----------+--------------
>   default_russian | default  | ru_RU.KOI8-R
>   utf8_russian    | default  | ru_RU.UTF-8
>   simple          | default  |
>   default         | default  | ru_RU.KOI8-R
> (4 rows)
>
>
> wikidb=# select convert(old_text,'UTF8','KOI8'),
>    to_tsvector(convert(old_text,'UTF8', 'KOI8')) from
>    mediawiki.pagecontent where old_id=1499;
>     convert   |     to_tsvector
> -------------+---------------------
>   проба proba | 'proba':2 'проба':1
> (1 row)
>                           ------
>
> То есть в первом случае русские слова не индексируются, а во втором
> проблем нет. В каком месте разложены грабли?
>
> С уважением
>         Евгений
>
> P.S. С наступившим Новым Годом всех, естественно.
> ---------------------------(end of broadcast)---------------------------
> TIP 7: You can help support the PostgreSQL project by donating at
>
>                 http://www.postgresql.org/about/donate
>


--
Best regards,
Nikolay

pgsql-ru-general by date:

Previous
From: "Evgeny M. Baldin"
Date:
Subject: tsearch2 и unicode
Next
From: "Evgeny M. Baldin"
Date:
Subject: Re: tsearch2 и unicode