Документация по PostgreSQL 9.4.1 | |||
---|---|---|---|
Пред. | Уровень выше | Приложение E. Дополнительно поставляемые модули | След. |
E.43. unaccent
Модуль unaccent представляет словарь текстового поиска, который убирает надстрочные (диакритические) знаки из лексем. Это фильтрующий словарь, что значит, что выводимые им данные всегда передаются следующему словарю (если он есть), в отличие от нормальных словарей. Применяя его, можно выполнить полнотекстовый поиск без учёта ударений (диакритики).
Текущую реализацию unaccent нельзя использовать в качестве нормализующего словаря для словаря thesaurus.
E.43.1. Конфигурирование
Словарь unaccent принимает следующие параметры:
Параметр RULES задаёт базовое имя файла со списком правил преобразования. Этот файл должен находиться в каталоге $SHAREDIR/tsearch_data/ (где под $SHAREDIR понимается каталог с общими данными инсталляции PostgreSQL). Имя файла должно заканчиваться расширением .rules (которое не нужно указывать в параметре RULES).
Файл правил имеет следующий формат:
Каждая строка содержит пару символов; первый из них представляет букву с диакритическим знаком, а второй — без. Первый символ заменяется на второй. Например:
À A Á A Â A Ã A Ä A Å A Æ A
Более полный набор правил, непосредственно пригодный для европейских языков, можно найти в файле unaccent.rules, который помещается в $SHAREDIR/tsearch_data/, когда устанавливается модуль unaccent.
E.43.2. Usage
При установке расширения unaccent в базе создаётся шаблон текстового поиска unaccent и словарь unaccent на его основе. Для словаря unaccent по умолчанию определяется параметр RULES='unaccent', благодаря чему его можно сразу использовать со стандартным файлом unaccent.rules. При желании вы можете изменить этот параметр, например, так
mydb=# ALTER TEXT SEARCH DICTIONARY unaccent (RULES='my_rules');
или создать новые словари на основе этого шаблона.
Протестировать этот словарь можно так:
mydb=# select ts_lexize('unaccent','Hôtel'); ts_lexize ----------- {Hotel} (1 row)
Следующий пример показывает, как вставить словарь unaccent в конфигурацию текстового поиска:
mydb=# CREATE TEXT SEARCH CONFIGURATION fr ( COPY = french ); mydb=# ALTER TEXT SEARCH CONFIGURATION fr ALTER MAPPING FOR hword, hword_part, word WITH unaccent, french_stem; mydb=# select to_tsvector('fr','Hôtels de la Mer'); to_tsvector ------------------- 'hotel':1 'mer':4 (1 row) mydb=# select to_tsvector('fr','Hôtel de la Mer') @@ to_tsquery('fr','Hotels'); ?column? ---------- t (1 row) mydb=# select ts_headline('fr','Hôtel de la Mer',to_tsquery('fr','Hotels')); ts_headline ------------------------ <b>Hôtel</b> de la Mer (1 row)
E.43.3. Функции
Функция unaccent()
удаляет надстрочные (диакритические) знаки из заданной строки. По сути она представляет собой обёртку вокруг словаря unaccent, но может вызываться и вне обычного контекста текстового поиска.
unaccent([словарь,] строка) returns text
Пример:
SELECT unaccent('unaccent', 'Hôtel'); SELECT unaccent('Hôtel');
Пред. | Начало | След. |
tsearch2 | Уровень выше | uuid-ossp |