F.17. dict_xsyn#
F.17. dict_xsyn
dict_xsyn
(Расширенный синонимический словарь) - это пример шаблона дополнительного словаря для полнотекстового поиска. Этот тип словаря заменяет слова группами их синонимов, что позволяет искать слово с использованием любого из его синонимов.
F.17.1. Конфигурация
A dict_xsyn
dictionary accepts the following options:
matchorig
контролирует, принимается ли исходное слово словарем. По умолчанию значениеtrue
.matchsynonyms
управляет тем, принимаются ли синонимы словарем. По умолчанию значениеfalse
.keeporig
контролирует, включается ли исходное слово в вывод словаря. По умолчанию значениеtrue
.keepsynonyms
управляет включением синонимов в вывод словаря. По умолчанию значениеtrue
.rules
- это базовое имя файла, содержащего список синонимов. Этот файл должен быть сохранен в$SHAREDIR/tsearch_data/
(где$SHAREDIR
означает общий каталог установки Tantor SE). Его имя должно заканчиваться на.rules
(который не должен включаться в параметрrules
).
Файл правил имеет следующий формат:
Каждая строка представляет собой группу синонимов для одного слова, которое указывается первым в строке. Синонимы разделяются пробелами, таким образом:
word syn1 syn2 syn3
Острый знак (
#
) является разделителем комментариев. Он может появляться в любом месте в строке. Остаток строки будет прне указан.
Посмотрите на файл xsyn_sample.rules
, который установлен в $SHAREDIR/tsearch_data/
, для примера.
F.17.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;