F.13. dict_xsyn
Модуль dict_xsyn
(Extended Synonym Dictionary, расширенный словарь синонимов) представляет собой пример дополнительного шаблона словаря для полнотекстового поиска. Этот словарь заменяет слова группами их синонимов, что позволяет находить слово по одному из его синонимов.
F.13.1. Конфигурирование
Словарь dict_xsyn
принимает следующие параметры:
Параметр
matchorig
определяет, будет ли словарь принимать изначальное слово. По умолчанию он включён (имеет значениеtrue
).Параметр
matchsynonyms
определяет, будет ли словарь принимать синонимы. По умолчанию он отключён (имеет значениеfalse
).Параметр
keeporig
определяет, будет ли исходное слово включаться в вывод словаря. По умолчанию он включён (имеет значениеtrue
).Параметр
keepsynonyms
определяет, будут ли в вывод словаря включаться синонимы. По умолчанию он включён (имеет значениеtrue
).Параметр
rules
задаёт базовое имя файла со списком синонимов. Этот файл должен находиться в каталоге$SHAREDIR/tsearch_data/
(где под$SHAREDIR
понимается каталог с общими данными инсталляции PostgreSQL). Имя файла должно заканчиваться расширением.rules
(которое не нужно указывать в параметреrules
).
Файл правил имеет следующий формат:
Каждая строка представляет группу синонимов для одного слова, которое задаётся первым в этой строке. Символы разделяются пробельными символами, так что строка выглядит так:
word syn1 syn2 syn3
Символ решётки (
#
) обозначает начало комментария. Он может находиться в любом месте строки. Следующая за ним часть строки игнорируется.
Пример словаря можно найти в файле xsyn_sample.rules
, устанавливаемом в $SHAREDIR/tsearch_data/
.
F.13.2. Использование
При установке расширения dict_xsyn
в базе создаётся шаблон текстового поиска xsyn_template
и словарь xsyn
на его базе, с параметрами по умолчанию. Вы можете изменить параметры словаря, например так:
mydb# ALTER TEXT SEARCH DICTIONARY xsyn (RULES='my_rules', KEEPORIG=false); ALTER TEXT SEARCH DICTIONARY
или создать новые словари на базе этого шаблона.
Протестировать этот словарь можно так:
mydb=# SELECT ts_lexize('xsyn', 'word'); ts_lexize ----------------------- {syn1,syn2,syn3} mydb# ALTER TEXT SEARCH DICTIONARY xsyn (RULES='my_rules', KEEPORIG=true); ALTER TEXT SEARCH DICTIONARY mydb=# SELECT ts_lexize('xsyn', 'word'); ts_lexize ----------------------- {word,syn1,syn2,syn3} mydb# ALTER TEXT SEARCH DICTIONARY xsyn (RULES='my_rules', KEEPORIG=false, MATCHSYNONYMS=true); ALTER TEXT SEARCH DICTIONARY mydb=# SELECT ts_lexize('xsyn', 'syn1'); ts_lexize ----------------------- {syn1,syn2,syn3} mydb# ALTER TEXT SEARCH DICTIONARY xsyn (RULES='my_rules', KEEPORIG=true, MATCHORIG=false, KEEPSYNONYMS=false); ALTER TEXT SEARCH DICTIONARY mydb=# SELECT ts_lexize('xsyn', 'syn1'); ts_lexize ----------------------- {word}
Но для практического применения его нужно включить в конфигурацию текстового поиска, как описано в Главе 12. Это может выглядеть примерно так:
ALTER TEXT SEARCH CONFIGURATION english ALTER MAPPING FOR word, asciiword WITH xsyn, english_stem;