dict_int

Модуль dict_int представляет собой пример дополнительного шаблона словаря для полнотекстового поиска. Этот пример словаря был создан для управления индексацией целых чисел (со знаком и без); он позволяет индексировать такие числа и при этом избежать чрезмерного возрастания количества уникальных слов, что значительно увеличивает производительность поиска.

Этот модуль считается «доверенным», то есть его могут устанавливать обычные пользователи с правом CREATE в текущей базе данных.


Конфигурация

Этот словарь принимает три параметра:

  • Параметр maxlen задает максимальное количество цифр, из которого может состоять целое число parameter. Значение по умолчанию — 6.

  • Параметр rejectlong определяет, должны ли чрезмерно длинные числа усекаться или игнорироваться. Если rejectlong имеет значение false (по умолчанию), этот словарь возвращает первые maxlen цифр целого числа. Если rejectlong имеет значение true, этот словарь воспринимает чрезмерно длинное число как стоп-слово, поэтому оно не будет индексироваться. Обратите внимание, что это означает, что такое целое число нельзя будет найти.

  • Параметр absval определяет, должны ли удаляться стоящие перед целыми числами знаки «+» и «-». Значение по умолчанию — false. При значении true знак удаляется до применения ограничения maxlen.


Применение

При установке расширения 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}

но для практического применения его нужно включить в конфигурацию текстового поиска, как описано в главе Полнотекстовый поиск. Это может выглядеть так:

ALTER TEXT SEARCH CONFIGURATION english
    ALTER MAPPING FOR int, uint WITH intdict;