tsearch2 и unicode
От | Evgeny M. Baldin |
---|---|
Тема | tsearch2 и unicode |
Дата | |
Msg-id | Pine.LNX.4.64.0701031220490.9110@star.inp.nsk.su обсуждение исходный текст |
Ответы |
Re: tsearch2 и unicode
|
Список | pgsql-ru-general |
Добрый день Преамбула: пытаюсь настроить русский полнотекстный поиск в 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. С наступившим Новым Годом всех, естественно.
В списке pgsql-ru-general по дате отправления: