Загружает ispell-данные


(PHP 4 >= 4.0.5, PHP 5 <= 5.0.5, PECL mnogosearch >= 1.0.0)

udm_load_ispell_dataЗагружает ispell-данные

Описание

bool udm_load_ispell_data ( resource $agent , int $var , string $val1 , string $val2 , int $flag )

udm_load_ispell_data() загружает ispell-данные.

После использования этой функции, для того, чтобы освободить память, выделенную для ispell-данных, пожалуйста, используйте функцию udm_free_ispell_data(), даже если вы используете режим UDM_ISPELL_TYPE_SERVER.

Список параметров

agent

Ссылка на идентификатор агента, полученная после вызова udm_alloc_agent().

var

Указывает источник ispell-данных. Может принимать следующие значения:

  • UDM_ISPELL_TYPE_DB - указывает, что ispell-данные должны быть загружены из SQL. В этом случае параметры val1 и val2 игнорируются и должны быть пустыми. flag должен быть равен 1.

    Замечание:

    flag указывает, что после загрузки ispell-данных из определённого ресурса они должны быть отсортированы (это необходимо для корректной работы ispell). В случае загрузки ispell-данных из файлов может быть несколько вызовов функции udm_load_ispell_data(), так что нет смысла сортировать данные после каждого вызова, кроме последнего. Поскольку в режиме db все данные загружаются одним вызовом, этот параметр должен иметь значение 1. В этом режиме, в случае ошибки, например, если ispell-таблицы отсутствуют, функция возвратит FALSE, а код и сообщение об ошибке будут доступны через udm_error() и udm_errno().

  • UDM_ISPELL_TYPE_AFFIX - указывает, что ispell-данные должны быть загружены из файла, и инициирует загрузку файла аффиксов. В этом случае val1 определяет двухбуквенный код языка, для которого загружаются аффиксы, а val2 - путь к файлу. Пожалуйста, обратите внимание, что, если введён относительный путь, модуль ищет файл не в UDM_CONF_DIR, а относительно текущего пути, т.е. пути, в котором выполняется скрипт. В случае ошибки в этом режиме, например, если файл отсутствует, функция возвратит FALSE, и будет выведено сообщение об ошибке. Текст сообщения об ошибке не может быть получен через udm_error() и udm_errno(), так как эти функции могут возвращать только сообщения, связанные с SQL. Пожалуйста, посмотрите описание параметра flag в UDM_ISPELL_TYPE_DB.

    Пример #1 Пример использования udm_load_ispell_data()

    <?php
    if ((! udm_load_ispell_data($udmUDM_ISPELL_TYPE_AFFIX'en''/opt/ispell/en.aff'0)) ||
        (! 
    udm_load_ispell_data($udmUDM_ISPELL_TYPE_AFFIX'ru''/opt/ispell/ru.aff'0)) ||
        (! 
    udm_load_ispell_data($udmUDM_ISPELL_TYPE_SPELL'en''/opt/ispell/en.dict'0)) ||
        (! 
    udm_load_ispell_data($udmUDM_ISPELL_TYPE_SPELL'ru''/opt/ispell/ru.dict'1))) {
        exit;
    }
    ?>

    Замечание:

    flag равен 1 только в последнем вызове.

  • UDM_ISPELL_TYPE_SPELL - указывает, что ispell-данные должны быть загружены из файла, и инициирует загрузку файла ispell-словаря. В этом случае val1 определяет двухбуквенный код языка, для которого загружаются аффиксы, а val2 - путь к файлу. Пожалуйста, обратите внимание, что, если введён относительный путь, модуль ищет файл не в UDM_CONF_DIR, а относительно текущего пути, т.е. пути, в котором выполняется скрипт. В случае ошибки в этом режиме, например, если файл отсутствует, функция возвратит FALSE, и будет выведено сообщение об ошибке. Текст сообщения об ошибке не может быть получен через udm_error() и udm_errno(), так как эти функции могут возвращать только сообщения, связанные с SQL. Пожалуйста, посмотрите описание параметра flag в UDM_ISPELL_TYPE_DB.

    <?php
    if ((! udm_load_ispell_data($udmUDM_ISPELL_TYPE_AFFIX'en''/opt/ispell/en.aff'0)) ||
       (! 
    udm_load_ispell_data($udmUDM_ISPELL_TYPE_AFFIX'ru''/opt/ispell/ru.aff'0)) ||
       (! 
    udm_load_ispell_data($udmUDM_ISPELL_TYPE_SPELL'en''/opt/ispell/en.dict'0)) ||
       (! 
    udm_load_ispell_data($udmUDM_ISPELL_TYPE_SPELL'ru''/opt/ispell/ru.dict'1))) {
     exit;
     }
    ?>

    Замечание:

    flag равен 1 только в последнем вызове.

  • UDM_ISPELL_TYPE_SERVER - включает поддержку spell-сервера. Параметр val1 указывает адрес хоста запущенного spell-сервера. val2 еще не используется, но в будущих версиях он будет указывать номер порта, используемого spell-сервером. Параметр flag в этом случае не нужен, так как ispell-данные хранятся на spell-сервере уже отсортированными.

    Spelld-сервер читает spell-данные из отдельного файла конфигурации (по умолчанию /usr/local/mnogosearch/etc/spelld.conf), сортирует их и сохраняет в памяти. С клиентами сервер взаимодействует с помощью двунаправленного общения: все данные передаются в индексатор (так что индексатор стартует быстрее), из search.cgi сервер получает слово для нормализации и затем передаёт клиенту (search.cgi) список нормализованных словоформ. Это обеспечивает самую быструю, по сравнению с режимами db и text обработку поисковых запросов (миную загрузку и сортировку всех spell-данных).

    Функция udm_load_ispell_data() в режиме UDM_ISPELL_TYPE_SERVER на самом деле не загружает ispell-данные, а только определяет адрес сервера. Фактически, сервер автоматически используется функцией udm_find() при выполнении поиска. В случае ошибок, например, если spell-сервер не запущен или указан неправильный хост, возвращаемых сообщений нет и конвертация ispell не работает.

    Замечание:

    Эта функция доступна в mnoGoSearch 3.1.12 или выше.

    Пример:
    <?php
    if (!udm_load_ispell_data($udmUDM_ISPELL_TYPE_SERVER''''1)) {
        echo 
    "Ошибка при загрузке ispell-данных с сервера<br />\n";
        exit;
    }
    ?>

Самым быстрым режимом является UDM_ISPELL_TYPE_SERVER. UDM_ISPELL_TYPE_TEXT медленнее а UDM_ISPELL_TYPE_DB самый медленный. Вышесказанное верно для mnoGoSearch 3.1.10 - 3.1.11. Планируется ускорить режим DB в будущих версиях, и он будет быстрее режима TEXT.

val1

val2

flag

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Примеры

Пример #2 Пример использования udm_load_ispell_data()

<?php
if (! udm_load_ispell_data($udmUDM_ISPELL_TYPE_DB''''1)) {
  
printf("Ошибка #%d: '%s'\n"udm_errno($udm), udm_error($udm));
  exit;
}
?>