Проект

Общее

Профиль

Установка словарей PostgreSql для русского полнотекстового поиска

Установка словарей PostgreSql для русского полнотекстового поиска.
PostgreSQL имеет собственный полнотекстовый поиск, но в нем нет стемминга для русского языка.
Словари для русского можно достать здесь:
http://ftp5.gwdg.de/pub/openoffice/contrib/dictionaries/ru_RU-pack.zip
Внутри будет архив ru_RU.zip, из которого необходимо извлечь файлы ru_RU.dic и ru_RU.aff.
Словари в кодировке koi8, поэтому их следует преобразовать в UTF-8:

iconv -f koi8-r -t utf-8 < ru_RU.aff > /usr/local/share/postgresql/tsearch_data/russian.affix
iconv -f koi8-r -t utf-8 < ru_RU.dic > /usr/local/share/postgresql/tsearch_data/russian.dict

Теперь в консоли постгреса создадим конфигурацию для полнотекстового поиска:

su - postgres
psql
CREATE TEXT SEARCH DICTIONARY russian_ispell (
    TEMPLATE = ispell,
    DictFile = russian,
    AffFile = russian,
    StopWords = russian
);
CREATE TEXT SEARCH CONFIGURATION ru (COPY=russian);

ALTER TEXT SEARCH CONFIGURATION ru ALTER MAPPING FOR hword, hword_part, word WITH russian_ispell, russian_stem;

Далее, если нужно чтобы эта конфигурация работала по умолчанию в postgres.conf следует написать

default_text_search_config = 'ru'

Проверим словари:

# select to_tsvector('ru', 'мама мыла раму');
to_tsvector 
-------------------------------------
'мама':1 'мыло':2 'мыть':2 'рама':3
(1 запись)