(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;
}
?>