F.13. dict_int
Модуль dict_int
представляет собой пример дополнительного шаблона словаря для полнотекстового поиска. Этот словарь был создан для управляемой индексации целых чисел (со знаком и без); он позволяет индексировать такие числа и при этом избежать чрезмерного разрастания списка уникальных слов, что значительно увеличивает скорость поиска.
Данный модуль считается «доверенным», то есть его могут устанавливать обычные пользователи, имеющие право CREATE
в текущей базе данных.
F.13.1. Конфигурирование
Этот словарь принимает три параметра:
Параметр
maxlen
задаёт максимальное число цифр, из которого может состоять целое число. Значение по умолчанию — 6.Параметр
rejectlong
определяет, должны ли чрезмерно длинные числа усекаться или игнорироваться. Еслиrejectlong
имеет значениеfalse
(по умолчанию), этот словарь возвращает первыеmaxlen
цифр целого числа. Еслиrejectlong
равенtrue
, чрезмерное длинное целое воспринимается как стоп-слово, и в результате не индексируется. Заметьте, это означает, что такое целое нельзя будет найти.Параметр
absval
определяет, должны ли удаляться знаки «+
» и «-
», стоящие перед целыми числами. Значение по умолчанию —false
. Если этот параметр имеет значениеtrue
, знак удаляется до того, как рассматривается ограничениеmaxlen
.
F.13.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;
12.11. Limitations
The current limitations of Postgres Pro's text search features are:
The length of each lexeme must be less than 2K bytes
The length of a
tsvector
(lexemes + positions) must be less than 1 megabyteThe number of lexemes must be less than 264
Position values in
tsvector
must be greater than 0 and no more than 16,383The match distance in a
<
(FOLLOWED BY)N
>tsquery
operator cannot be more than 16,384No more than 256 positions per lexeme
The number of nodes (lexemes + operators) in a
tsquery
must be less than 32,768
For comparison, the PostgreSQL 8.1 documentation contained 10,441 unique words, a total of 335,420 words, and the most frequent word “postgresql” was mentioned 6,127 times in 655 documents.
Another example — the PostgreSQL mailing list archives contained 910,989 unique words with 57,491,343 lexemes in 461,020 messages.