unaccent
Фильтрующий словарь текстового поиска.
Схема размещения:
ext
.Модуль представляет фильтрующий словарь текстового поиска, который убирает надстрочные (диакритические) знаки из лексем. Выводимые словарем данные всегда передаются следующему словарю, если он существует. Применяя словарь, можно выполнить полнотекстовый поиск без учета ударений (диакритики).
Конфигурирование словаря
unaccent
заключается в настройке параметра RULES
, который задает базовое имя файла со списком правил преобразования. Этот файл должен находиться в каталоге $SHAREDIR/tsearch_data/
(под $SHAREDIR
понимается каталог с общими данными инсталляции PostgreSQL). Имя файла должно заканчиваться расширением .rules
. Расширение в параметре RULES
не указывается.Функция
unaccent()
удаляет надстрочные (диакритические) знаки из заданной строки, представляя собой обертку вокруг словарей в стиле unaccent
. Может вызываться и вне обычного контекста текстового поиска.unaccent([словарь regdictionary,] строка text) returns text
Если аргумент
словарь
опущен, будет использоваться словарь с именем unaccent
, находящийся в той же схеме, что и сама функция unaccent()
.Текущую реализацию
unaccent
нельзя использовать в качестве нормализующего словаря для словаря thesaurus
.При установке расширения
unaccent
в базе создается шаблон текстового поиска unaccent
и словарь unaccent
на его основе. Для словаря unaccent
по умолчанию определяется параметр RULES='unaccent'
, благодаря чему его можно сразу использовать со стандартным файлом unaccent.rules
.Можно изменить этот параметр, например:
ALTER TEXT SEARCH DICTIONARY unaccent (RULES='my_rules');
Протестировать этот словарь можно так:
SELECT ts_lexize('unaccent','Hôtel');
Пример вывода результата выполнения запроса:
Раскрыть type=sqlts_lexize ----------- {Hotel} (1 row)
Функция
unaccent()
:SELECT unaccent('unaccent', 'Hôtel'); -- или следующий формат SELECT unaccent('Hôtel');
Пример вывода результата выполнения запроса:
Раскрыть type=sqlunaccent ---------- Hotel (1 row)
Следующий пример показывает, как вставить словарь
unaccent
в конфигурацию текстового поиска:CREATE TEXT SEARCH CONFIGURATION fr ( COPY = french ); ALTER TEXT SEARCH CONFIGURATION fr ALTER MAPPING FOR hword, hword_part, word WITH unaccent, french_stem; SELECT to_tsvector('fr','Hôtels de la Mer');
Пример вывода результата выполнения запроса:
Раскрыть type=sqlto_tsvector ------------------- 'hotel':1 'mer':4 (1 row)
SELECT to_tsvector('fr','Hôtel de la Mer') @@ to_tsquery('fr','Hotels');
Пример вывода результата выполнения запроса:
Раскрыть type=sql?column? ---------- t (1 row)
SELECT ts_headline('fr','Hôtel de la Mer',to_tsquery('fr','Hotels'));
Пример вывода результата выполнения запроса:
Раскрыть type=sqlts_headline ------------------------ <b>Hôtel</b> de la Mer (1 row)
Дополнительную информацию по поставляемому модулю unaccent можно получить по ссылке.