F.18. dict_int — пример словаря текстового поиска для целых чисел #
Модуль dict_int представляет собой пример дополнительного шаблона словаря для полнотекстового поиска. Этот словарь был создан для управляемой индексации целых чисел (со знаком и без); он позволяет индексировать такие числа и при этом избежать чрезмерного разрастания списка уникальных слов, что значительно увеличивает скорость поиска.
Данный модуль считается «доверенным», то есть его могут устанавливать обычные пользователи, имеющие право CREATE в текущей базе данных.
F.18.1. Конфигурирование #
Этот словарь принимает три параметра:
Параметр
maxlenзадаёт максимальное число цифр, из которого может состоять целое число. Значение по умолчанию — 6.Параметр
rejectlongопределяет, должны ли чрезмерно длинные числа усекаться или игнорироваться. Еслиrejectlongимеет значениеfalse(по умолчанию), этот словарь возвращает первыеmaxlenцифр целого числа. Еслиrejectlongравенtrue, чрезмерное длинное целое воспринимается как стоп-слово, и в результате не индексируется. Заметьте, это означает, что такое целое нельзя будет найти.Параметр
absvalопределяет, должны ли удаляться знаки «+» и «-», стоящие перед целыми числами. Значение по умолчанию —false. Если этот параметр имеет значениеtrue, знак удаляется до того, как рассматривается ограничениеmaxlen.
F.18.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;