Re: tsearch2 и unicode - Mailing list pgsql-ru-general
| From | Evgeny M. Baldin |
|---|---|
| Subject | Re: tsearch2 и unicode |
| Date | |
| Msg-id | Pine.LNX.4.64.0701031857250.9110@star.inp.nsk.su Whole thread Raw |
| In response to | tsearch2 и unicode ("Evgeny M. Baldin" <E.M.Baldin@inp.nsk.su>) |
| List | pgsql-ru-general |
Добрый день
Проблема решилась тем, что я скачал и собрал PostgreSQL 8.2 - заработало
и с локалью ru_RU.UTF-8. Почему не работала раньше я так и не понял.
> pg_ts_cfg - в Ваших распоряжении, Вам надо только проапдейтить её :-)
> указав таким образом, какая рабочая кодировка используется.
На сколько я понимаю в pg_ts_cfgmap всё было описано правильно и по
умолчанию использовалсь utf8_russian.
С уважением
Евгений
P.S. В последней стабильной версии MediaWiki 1.8.2 при работе с PostgreSQL
есть бага (?) которая не позволяет организовать полнотекстный поиск для
нелатиницы (например, русских слов). Я попытался описать решение в
меру своего понимания вот здесь:
http://bugzilla.wikimedia.org/show_bug.cgi?id=8470
On Wed, 3 Jan 2007, Nikolay Samokhvalov wrote:
> 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
>>
>
>
>
pgsql-ru-general by date: