 |
(PHP 4 >= 4.0.5)
udm_load_ispell_data - загружает ispell-данные.
Описание
int udm_load_ispell_data (int agent, int var, string val1, string
val2, int flag)
Возвращает TRUE при успехе, FALSE при
ошибке.
agent - ссылка на идентификатор агента, полученная вызовом
udm_alloc_agent().
var - параметр, указывающий источник ispell-данных. Может
иметь значения, указанные далее.
После использования этой функции, чтобы освободить память, выделенную
для ispell-данных, используйте udm_free_ispell_data(),
даже если вы применяете режим UDM_ISPELL_TYPE_SERVER.
Самым быстрым режимом является UDM_ISPELL_TYPE_SERVER. UDM_ISPELL_TYPE_TEXT
медленнее, а UDM_ISPELL_TYPE_DB - самый медленный. Вышеприведённый патэрн
TRUE для mnoGoSearch 3.1.10 - 3.1.11. Планируется ускорить
режим DB в будущих версиях, и он будет быстрее режима TEXT.
-
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().
Пример:
if (! udm_load_ispell_data($udm,UDM_ISPELL_TYPE_DB,'','',1)) { printf("Error
#%d: '%s'\n", udm_errno($udm), udm_error($udm)); exit; }
|
-
UDM_ISPELL_TYPE_AFFIX - указывает, что ispell-данные должны быть
загружены из файла, и инициирует загрузку файла аффиксов. В этом случае
val1 определяет двухбуквенный код языка для которого
загружаются аффиксы, а val2 - путь к файлу. Пожалуйста,
обратите внимание, что, если введён относительный путь, модуль ищет
файл не в UDM_CONF_DIR, а относительно текущего пути, т.е. пути, в
котором выполняется скрипт. В случае ошибки в этом режиме, например,
если файл отсутствует, функция возвратит FALSE, и
будет выведено сообщение об ошибке. Доступ к тексту сообщения об ошибке
не может быть получен через udm_error()
и udm_errno(), поскольку эти функции
могут возвращать только сообщения, ассоциированные с SQL. См. описание
параметра flag в UDM_ISPELL_TYPE_DB.
Пример:
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.
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; }
|
Примечание: равен 1 только в последнем вызове.
-
UDM_ISPELL_TYPE_SERVER - включает поддержку spell-сервера. Параметр
val1 указывает адрес хоста host, на котором работает
spell-сервер. val2 ` ещё не используется, но в будущих
релизах будет указывать номер порта, используемого spell-сервером.
Параметр flag в этом случае не нужен, так как ispell-данные
хранятся на spel-сервере уже отсортированными.
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 или
новее.
Пример:
if (!udm_load_ispell_data($udm,UDM_ISPELL_TYPE_SERVER,'','',1)) { printf("Error
loading ispell data from server<br>\n"); exit; }
|
|
 |