Перейти к основному содержимому

dict_int — пример словаря полнотекстового поиска для целых чисел

примечание

Эта страница переведена при помощи нейросети GigaChat.

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

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

Конфигурирование

Словарь принимает три опции:

  • Параметр maxlen задает максимальное количество цифр, разрешенных в целочисленном слове. Значение по умолчанию равно 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;