Перейти к основному содержимому

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;