http://www.postgresql.org/about/news.918
Original Press Release:
http://www.postgresql.org/about/press/presskit83.html
Несколько поменялся подход к настройке full text search, однако кое-какие наработки из настройки full text search для postgresql 8.2 нам потребуются.
Кое-что можно вычитать из официальной документации, но нас также интересует работа с русским полнотекстовым поиском.
CREATE TEXT SEARCH DICTIONARY russian_ispell (
TEMPLATE = ispell,
DictFile = russian,
AffFile = russian,
StopWords = russian
);
CREATE TEXT SEARCH CONFIGURATION ru ( COPY = russian );
CREATE TEXT SEARCH DICTIONARY english_ispell (
TEMPLATE = ispell,
DictFile = english,
AffFile = english,
StopWords = english
);
CREATE TEXT SEARCH CONFIGURATION en ( COPY = russian );
ALTER TEXT SEARCH CONFIGURATION ru ALTER MAPPING FOR hword, hword_part, word WITH russian_ispell, russian_stem;
ALTER TEXT SEARCH CONFIGURATION ru ALTER MAPPING FOR asciihword, asciiword, hword_asciipart WITH english_ispell, english_stem;
При этом нам потребуются ispell файлы *dict и *affix (в 8.2 это называлось *aff) /usr/share/postgresql/tsearch_data/
- russian.dict (старое название: russian_utf8.dict)
- russian.affix (старое название: russian_utf8.aff)
- english.dict
- english.affix (старое название: english.aff)
Их можно взять, например, отсюда: http://wiki.services.openoffice.org/wiki/Dictionaries
при этом словари находятся в кодировке koi8-r, а postgresql fts по разумным соображениям требует utf-8, т.о. необоходимо преобразовать словари:
$ iconv -f koi8-r -t utf-8 < ru_RU.aff > /usr/share/postgresql/tsearch_data/russian.affix
$ iconv -f koi8-r -t utf-8 < ru_RU.dic > /usr/share/postgresql/tsearch_data/russian.dict
примечание: конкретные пути расположения файлов, необходимых для postgresql зависит от конкретного дистрибутива.
# select to_tsvector('ru', 'мама мыла раму');FTS работает !
to_tsvector
-------------------------------------
'мама':1 'мыло':2 'мыть':2 'рама':3
(1 запись)
Однако, хочется использовать настроенную конфигурацию по-умолчанию.
С одной стороны можно делать в каждой сессии
SET default_text_search_config = 'ru';но это крайне не удобно.
Либо отредактировать /var/lib/postgresql/data/postgresql.conf:
default_text_search_config = 'ru'
PS. в результате подготовки использовались некоторые слайды со второй PostgreSQL-встречи: полнотекстовый поиск
2 комментария:
Прочитал в вашем блоге о fts в postgreSQL. Большое спасибо! Помогло решить проблему с koi8r -> utf8. Спасибо!
you are welcome !
Отправить комментарий