dict_xsyn — пример словаря синонимов для полнотекстового поиска
Эта страница переведена при помощи нейросети GigaChat.
Модуль dict_xsyn
(Extended Synonym Dictionary, расширенный словарь синонимов) является примером шаблона словаря дополнений для поиска по всему тексту. Этот тип словаря заменяет слова группами их синонимов и тем самым позволяет искать слово с использованием любого из его синонимов.
Конфигурирование
Словарь принимает параметры:
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/
, для примера.
Использование
Установка расширения 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}
Но для практического применения его нужно включить в конфигурацию текстового поиска. Это может выглядеть так:
ALTER TEXT SEARCH CONFIGURATION english
ALTER MAPPING FOR word, asciiword WITH xsyn, english_stem;