F.15. dict_xsyn — пример синонимического словаря полнотекстового поиска#

F.15. dict_xsyn — пример синонимического словаря полнотекстового поиска

F.15. dict_xsyn — пример синонимического словаря полнотекстового поиска #

dict_xsyn (Расширенный синонимический словарь) - это пример шаблона дополнительного словаря для полнотекстового поиска. Этот тип словаря заменяет слова группами их синонимов, что позволяет искать слово с использованием любого из его синонимов.

F.15.1. Конфигурация #

A dict_xsyn dictionary accepts the following options:

  • matchorig контролирует, принимается ли исходное слово словарем. По умолчанию значение true.

  • matchsynonyms управляет тем, принимаются ли синонимы словарем. По умолчанию значение false.

  • keeporig контролирует, включается ли исходное слово в вывод словаря. По умолчанию значение true.

  • keepsynonyms управляет включением синонимов в вывод словаря. По умолчанию значение true.

  • rules - это базовое имя файла, содержащего список синонимов. Этот файл должен быть сохранен в $SHAREDIR/tsearch_data/ (где $SHAREDIR означает общий каталог установки Tantor BE). Его имя должно заканчиваться на .rules (который не должен включаться в параметр rules).

Файл правил имеет следующий формат:

  • Каждая строка представляет собой группу синонимов для одного слова, которое указывается первым в строке. Синонимы разделяются пробелами, таким образом:

    word syn1 syn2 syn3
    

  • Острый знак (#) является разделителем комментариев. Он может появляться в любом месте в строке. Остаток строки будет прне указан.

Посмотрите на файл xsyn_sample.rules, который установлен в $SHAREDIR/tsearch_data/, для примера.

F.15.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;