| Документация к Postgres Pro 9.5.12.1 | |||
|---|---|---|---|
| Пред. | Уровень выше | Приложение F. Дополнительно поставляемые модули | След. | 
F.41. shared_ispell
Модуль shared_ispell предоставляет разделяемый словарь ispell, то есть словарь, расположенный в общем сегменте памяти. В традиционной реализации ispell каждый сеанс инициализирует и загружает собственный экземпляр словаря, и на это уходит много ресурсов процессора и памяти.
Это расширение выделяет область памяти в разделяемом сегменте (вы должны выбрать его размер заранее) и загружает в неё словарь при первом использовании.
F.41.1. Функции
Реализованные в модуле shared_ispell функции перечислены в Табл. F-32.
Таблица F-32. Функции shared_ispell
| Функция | Возвращает | Описание | 
|---|---|---|
shared_ispell_reset() | void | Сбрасывает словари (например, для повторной загрузки изменённых файлов с диска). Сеансы, в которых словари уже использовались, будут должны переинициализировать их. | 
shared_ispell_mem_used() | int | Возвращает объём памяти, используемой загруженными словарями в разделяемом сегменте (в байтах). | 
shared_ispell_mem_available() | int | Возвращает объём доступной памяти в разделяемом сегменте. | 
shared_ispell_dicts() | setof(dict_name varchar, affix_name varchar, words int, affixes int, bytes int) | Возвращает список словарей, загруженных в разделяемый сегмент. | 
shared_ispell_stoplists() | setof(stop_name varchar, words int, bytes int) | Возвращает список наборов стоп-слов, загруженных в разделяемый сегмент. | 
F.41.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.41.4. Автор
Томаш Вондра <[email protected]>, Прага, Чешская республика
| Пред. | Начало | След. | 
| sepgsql | Уровень выше | spi | 
