F.16. dict_int — пример словаря текстового поиска для целых чисел #
Модуль dict_int
представляет собой пример дополнительного шаблона словаря для полнотекстового поиска. Этот словарь был создан для управляемой индексации целых чисел (со знаком и без); он позволяет индексировать такие числа и при этом избежать чрезмерного разрастания списка уникальных слов, что значительно увеличивает скорость поиска.
Данный модуль считается «доверенным», то есть его могут устанавливать обычные пользователи, имеющие право CREATE
в текущей базе данных.
F.16.1. Конфигурирование #
Этот словарь принимает три параметра:
Параметр
maxlen
задаёт максимальное число цифр, из которого может состоять целое число. Значение по умолчанию — 6.Параметр
rejectlong
определяет, должны ли чрезмерно длинные числа усекаться или игнорироваться. Еслиrejectlong
имеет значениеfalse
(по умолчанию), этот словарь возвращает первыеmaxlen
цифр целого числа. Еслиrejectlong
равенtrue
, чрезмерное длинное целое воспринимается как стоп-слово, и в результате не индексируется. Заметьте, это означает, что такое целое нельзя будет найти.Параметр
absval
определяет, должны ли удаляться знаки «+
» и «-
», стоящие перед целыми числами. Значение по умолчанию —false
. Если этот параметр имеет значениеtrue
, знак удаляется до того, как рассматривается ограничениеmaxlen
.
F.16.2. Использование #
При установке расширения dict_int
в базе создаётся шаблон текстового поиска intdict_template
и словарь intdict
на его базе, с параметрами по умолчанию. Вы можете изменить параметры словаря, например так:
mydb# ALTER TEXT SEARCH DICTIONARY intdict (MAXLEN = 4, REJECTLONG = true); ALTER TEXT SEARCH DICTIONARY
или создать новые словари на базе этого шаблона.
Протестировать этот словарь можно так:
mydb# select ts_lexize('intdict', '12345678'); ts_lexize ----------- {123456}
Но для практического применения его нужно включить в конфигурацию текстового поиска, как описано в Главе 12. Это может выглядеть примерно так:
ALTER TEXT SEARCH CONFIGURATION english ALTER MAPPING FOR int, uint WITH intdict;