udm_load_ispell_data
(PHP 4 >= 4.0.5, PHP 5 < 5.1.0, PECL mnogosearch >= 1.0.0)
udm_load_ispell_data — Загружает ispell-данные
Описание
$agent
, int $var
, string $val1
, string $val2
, int $flag
) : booludm_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($udm, UDM_ISPELL_TYPE_AFFIX, 'en', '/opt/ispell/en.aff', 0)) ||
(! udm_load_ispell_data($udm, UDM_ISPELL_TYPE_AFFIX, 'ru', '/opt/ispell/ru.aff', 0)) ||
(! udm_load_ispell_data($udm, UDM_ISPELL_TYPE_SPELL, 'en', '/opt/ispell/en.dict', 0)) ||
(! udm_load_ispell_data($udm, UDM_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($udm, UDM_ISPELL_TYPE_AFFIX, 'en', '/opt/ispell/en.aff', 0)) ||
(! udm_load_ispell_data($udm, UDM_ISPELL_TYPE_AFFIX, 'ru', '/opt/ispell/ru.aff', 0)) ||
(! udm_load_ispell_data($udm, UDM_ISPELL_TYPE_SPELL, 'en', '/opt/ispell/en.dict', 0)) ||
(! udm_load_ispell_data($udm, UDM_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($udm, UDM_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($udm, UDM_ISPELL_TYPE_DB, '', '', 1)) {
printf("Ошибка #%d: '%s'\n", udm_errno($udm), udm_error($udm));
exit;
}
?>