F.59. shared_ispell
Модуль shared_ispell предоставляет разделяемый словарь ispell, то есть словарь, расположенный в общем сегменте памяти. В традиционной реализации ispell каждый сеанс инициализирует и загружает собственный экземпляр словаря, и на это уходит много ресурсов процессора и памяти.
Это расширение выделяет область памяти в разделяемом сегменте (вы должны выбрать его размер заранее) и загружает в неё словарь при первом использовании.
F.59.1. Функции
Реализованные в модуле shared_ispell функции перечислены в Таблице F.44.
Таблица F.44. Функции shared_ispell
F.59.2. Параметры GUC
F.59.3. Использование словаря
Этот модуль должен выделить область памяти в разделяемом сегменте. Поэтому добавьте в файл конфигурации следующие параметры (или отредактируйте текущие значения):
# загружаемые библиотеки shared_preload_libraries = 'shared_ispell' # объём разделяемой памяти shared_ispell.max_size = 32MB
Чтобы понять, сколько памяти вам действительно нужно, задайте сначала большое значение (например, 200 МБ) и загрузите все нужные вам словари. Затем воспользуйтесь функцией shared_ispell_mem_used() и определите, сколько памяти на самом деле используется (и скорректируйте соответствующую переменную GUC shared_ispell.max_size).
Не задавайте в точности полученное значение, оставьте небольшой резерв, чтобы вы могли перезагружать словари, не изменяя предел GUC max_size (что потребует перезапуска БД). Объёма в районе 512 КБ будет вполне достаточно.
Это расширение определяет шаблон shared_ispell, используя который можно определять собственные словари текстового поиска. Например, вы можете сделать следующее:
CREATE TEXT SEARCH DICTIONARY english_shared (
TEMPLATE = shared_ispell,
DictFile = en_us,
AffFile = en_us,
StopWords = english
);
CREATE TEXT SEARCH CONFIGURATION public.english_shared
( COPY = pg_catalog.simple );
ALTER TEXT SEARCH CONFIGURATION english_shared
ALTER MAPPING FOR asciiword, asciihword, hword_asciipart,
word, hword, hword_part
WITH english_shared, english_stem;Проверить полученную конфигурацию можно так:
SELECT * FROM ts_debug('english_shared', 'abilities');
alias | description | token | dictionaries | dictionary | lexemes
-----------+-----------------+-----------+-------------------------------+----------------+-----------
asciiword | Word, all ASCII | abilities | {english_shared,english_stem} | english_shared | {ability}
(1 row)Вы также можете изменить существующую конфигурацию текстового поиска. Например, если у вас есть конфигурация public.english, вы можете подключить к ней шаблон shared_ispell:
ALTER TEXT SEARCH CONFIGURATION public.english
ALTER MAPPING FOR asciiword, asciihword, hword_asciipart,
word, hword, hword_part
WITH english_shared, english_stem;F.59.4. Автор
Томаш Вондра <tomas.vondra@2ndquadrant.com>, Прага, Чешская республика