tsearch2 и unicode - Mailing list pgsql-ru-general

From Evgeny M. Baldin
Subject tsearch2 и unicode
Date
Msg-id Pine.LNX.4.64.0701031220490.9110@star.inp.nsk.su
Whole thread Raw
Responses Re: tsearch2 и unicode  ("Nikolay Samokhvalov" <samokhvalov@gmail.com>)
List 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 by date:

Previous
From: "Nikolay Samokhvalov"
Date:
Subject: Re: SELECT ... WHERE ... IN (SELECT ...) -> SELECT ... WHERE (... OR ... )
Next
From: "Nikolay Samokhvalov"
Date:
Subject: Re: tsearch2 и unicode