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;