# Хранение сжатых копий документов

DataparkSearch имеет возможность хранения сжатых копий проиндексированных документов. Копии сжимаются и хранятся при помощи нового демона - `stored`, который устанавливается в поддиректорию `sbin` корневой директории установки DataparkSearch (по умолчанию: `/usr/local/dpsearch/sbin`).

`stored` может быть использован для создания цитат документов на основе слов из запроса.
Для задания приблизительного размера цитаты в байтах, используйте в `search.htm` (в секции `variables`) команду `ExcerptSize`. Значение, используемое по умолчанию, равно 256. Вы можете выключить создание цитат (но сохранив возможность показа сохраненных копий) документов указав команду `DoExcerpt no` в вашем поисковом шаблоне.

В DataparkSearch можно хранить сжатые копии документов без использования демона `stored`. Для этого вместо настройки параметров `stored` в файле конфигурации `indexer.conf` необходимо указать команду `DoStore yes`.

Сохраненные копии документов отображаются отдельной CGI-программой `storedoc.cgi`. Эта программа получает сохранённую копию от `stored` и отображает содержимое этого документа в окне броузера предварительно выделив слова из поискового запроса.

Для использования возможностей `stored`, скомпилируйте DataparkSearch с поддержкой `zlib`:

    ./configure --with-zlib <other arguments>

Вы можете использовать команды `Store` и `NoStore` для разрешения или запрещения сохранения некоторых фалов по шаблону. Аргументы у этих команд точно такиеже, как и у команды `Allow` (см. ). Все документы сохраняются по умолчанию, если включена поддержка stored.

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

Перед использованием `stored`, пожалуйста, проделпйте следующее:

- Скопируйте `/usr/local/dpsearch/etc/stored.conf-dist` в `/usr/local/dpsearch/etc/stored.conf`.

  Отредактируйте `/usr/local/dpsearch/etc/stored.conf`

  Следующие команды используются для конфигурирования `stored`:

  - `
    Listen` говорит `stored` к какому адресу и/или порту привязаться. По умолчанию, `stored` привязывается к порту 7004 и каждому адресу. Возможно указывать только порт:

    `Listen 7004`

    Или только адрес:

    `Listen 127.0.0.2`

    Или оба, алрес и порт:

    `Listen 127.0.0.2:7004`

  - `
    VarDir` задаёт альтернативную рабочую директорию `var/`, например:

    `VarDir /mnt/d/dpsearch/var/`

  - `
    StoredFiles` указывает число файлов-хранилищ, создаваемых в директории `var/stored/`, например:

    `StoredFiles 256`

  - `
    OptimizeInterval` задаёт интервал в секундах между попытками оптимизировать очередной файл-хранилище, например:

    `OptimizeInterval 300`

  - `
    OptimizeRatio` задаёт уровень дефрагментации в процентах, по достижении которого файл-хранилище оптимизируется, например:.

    `OptimizeRatio 3`

- Запустите `stored`:

  `/usr/local/dpsearch/sbin/stored &`

- Отредактиируйте `indexer.conf` и `search.htm` (или `searchd.conf`, если используется `searchd`). Укажите адрес и порт, кроторые `indexer` будет использовать для связи с `stored`. Используйте параметр `stored` команды `DBAddr`, например:

  `DBAddr mysql://localhost/search/?dbmode=cache&stored=localhost:7004`

## Как работает stored

После того, как вы сконфигурируете и запустите `stored`, `indexer` будет передавать ему проиндексированные документы. А `stored` будет сжимать полученные документы и сохранять их на диске.

## Использование stored при поиске

Для включения отображения сохраненных документов при поиске, проделайте следующее:

- Отредактируйте `storedoc.htm` (шаблон для `storedoc.cgi`), если необходимо.

- Добавьте в секцию `<!--res-->` шаблона `search.htm` ссылку на `storedoc.cgi`, например: `<A HREF="$(stored_href)">Cached copy</A>`

- Укажите URL CGI-программы `storedoc.cgi` в `search.htm` (по умолчанию `$(stored_href)` будет возвращать `/cgi-bin/storedoc.cgi`). Если вам необходимо указать другой URL, добавьте в раздел переменных шаблона `search.htm` следующую строку:

  `StoredocURL /path/to/storedoc.cgi`

  Или для абсолютной ссылки:

  `StoredocURL http://servername/path/to/storedoc.cgi`

Если все сконфигурировано правильно, при поиске `stored` работает следующим образом:

1. `search.htm` показывает ссылку на `storedoc.cgi`;

2. Когда пользователь кликает по ссылке, `storedoc.cgi` посылает запрос к демону `stored` по адресу, указанному в `storedoc.htm` при помощи параметра `stored` команды `DBAddr`;

3. По этому запросу, `stored` находит и разжимает запрошенную копию и отправляет ее `storedoc.cgi`;

4. `storedoc.cgi` разбирает полученный документ и выделяет все слова из поискового запроса. Способ выделения указывается в шаблоне `storedoc.htm` командами `
   HlBeg` and `
   HlEnd`;