Добрый день
Преамбула: пытаюсь настроить русский полнотекстный поиск в 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. С наступившим Новым Годом всех, естественно.