Скачать SDK поисковой системы с примерами и другие компоненты можно здесь 
Скачать SDK поискового движка можно на странице загрузок.
В SDK входит DLL для платформы Windows x86 и несколько примеров вызова API из C++, C# и Delphi кода.
По вопросам лицензирования движка и за консультациями пожалуйста обращайтесь к разработчикам.
О других SDK проекта, включая SDK Грамматического Словаря, можно узнать здесь.
Скомпилированная DLL движка находится в SDK: ...\lib\faind.win32.dll. Заголовочный файл с объявлениями процедур для C++ faind.h находится в каталоге \include\solarix.
Кроме того, движок при инициализации обязательно потребует, чтобы в текущем каталоге находились некоторые файлы:
1. файл локализованных ресурсов faind.lang и сопутствующие файлы faind.lang.ru, faind.lang.en и т.д.;
2. файлы скомпилированного словаря, а именно файл каталога словаря dictionary.xml.
Для использования поисковой системы в программах на Delphi в составе SDK есть готовый интерфейсный модуль ...\include\solarix\SearchEngineAPI.pas.
На платформе .NET можно использовать готовую обертку search_engine_fx.dll, которая вместе с исходными текстами входит в SDK.
Вы можете заметить, что набор доступных процедур API значительно меньше количества команд поискового движка. Это связано с тем, что многие команды движка являются сугубо императивными и не возвращают каких-либо данных. Для выполнения таких команд, как удаление индекса или обновление индекса, достаточно воспользоваться одной командой sol_Execute, подав ей в качестве аргумента соответствующим образом сформатированную строку (см. подробнее):
sol_Execute( hEngine, L"-index domain=my_index -index refresh" );
Все процедуры объявлены в файле \include\solarix\faind.h, который входит в состав SDK.
Начальная инициализация движка
HFAIND sol_CreateSearchEngine()
Возвращается дескриптор движка, который затем необходимо указывать во всех вызовах API.
При этом словарь не загружается (поисковый движок сам загрузит словарь, если запрос будет содержать некоторые опции, требующие включения морфологических механизмов, например -wordforms).
После создания экземпляра следует обязательно завершить
его инициализацию, загрузив конфигурационный файл процедурой sol_ReadIni.
Начальная инициализация движка в портабельном режиме
HFAIND sol_CreatePortableSearcher( int flags )
Отличается от sol_CreateSearchEngine последующим функционированием поискового движка, а также отсутствием необходимости выполнять вторую часть инициализации посредством вызова sol_ReadIni.
В портабельном режиме появляется удобная возможность
работать с индексированными документами,
распространяемыми на CD вместе с индексной базой.
Особенности работы следующие:
1. Движок не загружает и не использует список индексов с диска, как это обычно делает поисковая система. Вместо этого прикладная программа должна явно указать движку, что для поиска будет использоваться индексная база, расположенная в определенном каталоге (на DVD или жестком диске), с помощью вызова sol_AttachPortableIndex.
2. В качестве имени индекса в команде -index domain используется путь к индексу, указанный в sol_AttachPortableIndex.
3. Проиндексированные документы должны размещаться в том же каталоге, что и индексная база. Движок во время поиска автоматически будет переправлять файловые пути найденных документов так, чтобы они указывали на каталог базы. Таким образом, Вы можете создавать индекс консольной утилитой или оконной поисковой системой, а затем скопировать индексную базу и документы в каталог на DVD и искать по нему с помощью DLL поискового движка.
int sol_AttachPortableIndex( HFAIND hEngine, const wchar_t* Folder )
Эта процедура работает только для движка в портабельном режиме (см. sol_CreatePortableSearcher).
Аргументы:
Folder - имя папки, где располагаются файлы индексной базы данных, ранее созданной с помощью DLL, консольной или оконной версий движка. В этой же папке должны располагаться и проиндексированные документы, так как файловые пути для находимых по индексу документов будут автоматически скорректированы.
Возвращает:
0 - индекс успешно зарегистрирован;
-1 -
произошла ошибка, например движок не в
портабельном режиме.
Загрузка конфиг-файла с указанным именем
int sol_ReadIniW( HFAIND hEngine, const wchar_t* ini_filename )
int sol_ReadIniA( HFAIND hEngine, const char* ini_filename )
Возвращает:
0 - конфигурация успешно загружена;
-1 - ошибка загрузки конфигурации, например не найден указанный файл.
Инициализация движка обязательна.
Можно указать в качестве имени пустую строку,
тогда движок проинициализируется значениями по умолчанию. Пример конфигурационного
файла faind.ini можно
взять из дистрибутива поискового движка.
В консольных поисковых утилитах (настольной и серверной) есть специальная опция -ini, с помощью которой можно явно задать путь к конфигурационному файлу вместо того, чтобы полагаться на реализованный порядок поиска ini-файла.
Включение отладочной трассировки в указанный файл (журнал)
int sol_OpenLogFileW( HFAIND hEngine, const wchar_t* log_filename )
int sol_OpenLogFileA( HFAIND hEngine, const char* log_filename )
Аргументы:
log_filename - путь к создаваемому текстовому файлу трассировки
Возвращает:
0 - трассировка включена;
-1 - не удалось включить трассировку в указанный файл;
-2 - трассировка уже включена (возможно в другой файл).
В любой момент можно отключить трассировку, вызвав sol_CloseLogFile.
Отключение трассировки в журнал, закрытие файла журнала
void sol_CloseLogFile( HFAIND hEngine )
Формат страниц результата поиска HTML
void sol_GenerateHtml( HFAIND hEngine )
Результат форматируется в виде HTML, а не XML по умолчанию. Обратите внимание, что команда -listfiles поискового движка не оказывает влияния на формат результатов. Создаваемый HTML файл будет иметь кодировку utf-8.
Для получения страницы с результатами поиска следует использовать соответствующую группу процедур.
Формат страниц результата поиска XML
void sol_GenerateXml( HFAIND hEngine )
Результат форматируется в виде XML. Обратите внимание, что команда -listfiles
поискового движка не оказывает влияния на формат результатов. Создаваемый XML
файл будет иметь кодировку utf-8.
Для получения страницы с форматированными как XML результатами поиска следует использовать соответствующую группу процедур.
Не возвращать результаты исполнения запроса
void sol_NoResults( HFAIND hEngine )
Если исполняемая команда не возвращает интересующих нас результатов, то для уменьшения накладных расходов рекомендуется отменить формирование возвращаемой страницы для последующих команд с помощью этого вызова.
Не вписывать стандартные теги пролога и эпилога в HTML
void sol_StripHtml( HFAIND hEngine )
Страница результатов поиска в формате HTML не будет
содержать стандартного заголовка и завершающих тегов, то есть
<html>...<body> и </body></html>. Это позволяет
прикладному коду добавить к результатам собственные элементы оформления,
например форму для ввода параметров поиска.
Для увеличения юзабилити прикладного кода при выполнении некоторых времяемких операций типа поиска можно задавать callback-функции, которые движок будет вызывать при некоторых событиях.
void sol_SetCallback_StartFile( HFAIND hEngine, EngineCallbackProc_StartFile ptrFuction ) - задание callback-функции для контроля за началом обработки файлов
void sol_SetCallback_StartFolder( HFAIND hEngine, EngineCallbackProc_StartFolder ptrFuction ) - задание callback-функции для контроля за началом обработки каталогов
void sol_SetCallback_Success( HFAIND hEngine, EngineCallbackProc_Success ptrFuction ) - задание callback-функции для реакции на успех поиска (найдено соответствие паттерна запроса и контента файла).
HFAINDPARAMS sol_CreateParams( HFAIND hEngine )
Возвращает: хэндл объекта
Созданный блок параметров, дескриптор которого вернула процедура, затем заполняется значениями с
помощью sol_AddParameter, а после использования
в sol_ParseQueryWithParams или sol_ExecuteWithParams должен быть удален с
помощью процедуры sol_DeleteParams.
int sol_AddParam( HFAINDPARAMS hParams, const wchar_t* ParamName, const wchar_t* ParamValue )
Возвращает:
-1 - ошибка добавления;
>=0 - параметр успешно добавлен.
API не контролирует повторное добавление параметра с тем
же именем, порядок замены параметров на их значения в этом случае не
определен.
int sol_DeleteParams( HFAINDPARAMS hParams )
Возвращает:
0 - нормальное завершение;
-1 - ошибка;
Подготовка к выполнению строки запроса (синтаксис всех команд описан здесь).
HFAINDCMD sol_ParseQuery( HFAIND hEngine, const wchar_t*query )
HFAINDCMD sol_ParseSqlQuery( HFAIND hEngine, const wchar_t*query )
HFAINDCMD sol_ParseQueryWithParams( HFAIND hEngine, const wchar_t*query, HFAINDPARAMS hParams )
HFAINDCMD sol_ParseSqlQueryWithParams( HFAIND hEngine, const wchar_t*query, HFAINDPARAMS hParams )
Возвращает:
Дескриптор для объекта с подготовленным контекстом для исполнения команды. Подготовленная команда исполняется вызовом sol_ExecuteQuery.
Данная процедура реентерабельна, поэтому несколько потоков могут создавать и подготавливать команды одновременно. Эта процедура используется для подготовки выполнения любых команд, в том числе DDL (к примеру, удаление индекса), хотя в случае команд, не возвращающих текстовый результат, может быть удобнее использовать один вызов sol_Execute вместо цепочки из sol_ParseQuery+sol_ExecuteQuery+sol_DeleteQuery.
Варианты процедуры sol_ParseQueryWithParams и sol_ParseSqlQueryWithParams принимают еще один аргумент - блок параметров, то есть список пар имя-значение. Этот блок создается и заполняется процедурами sol_CreateParams и sol_AddParam. При парсинге запроса параметры буду заменены на свои значения, к примеру фрагмент команды
-dir ?1
будет заменен согласно значению параметра ?1.
см. подробнее о
параметризации запросов.
Выполнение подготовленной команды
int sol_ExecuteQuery( HFAIND hEngine, HFAINDCMD hCmd )
Возвращает:
0 - команда успешно выполнена;
-1 - при выполнении возникла ошибка.
Результаты выполнения запроса на поиск текста можно получить вызовом sol_GetResult. После обработки результатов необходимо обязательно вызвать sol_DeleteQuery.
Удаление выполненной команды и ее контекста
void sol_DeleteQuery( HFAINDCMD hCmd )
Освобождает ресурсы, выделенные для исполнения команды (см. sol_ParseQuery и sol_ExecuteQuery).
int sol_Execute( HFAIND hEngine, const wchar_t*query )
int sol_ExecuteSql( HFAIND hEngine, const wchar_t*query )
int sol_ExecuteWithParams( HFAIND hEngine, const wchar_t*query, HFAINDPARAMS hParams )
int sol_ExecuteSqlWithParams( HFAIND hEngine, const wchar_t*query, HFAINDPARAMS hParams )
Возвращает:
0 - команда успешно выполнена;
-1 - при выполнении возникла ошибка.
Этот вызов можно использовать вместо цепочки из sol_ParseQuery+sol_ExecuteQuery+sol_DeleteQuery для команд, которые не возвращают текстовые результаты, например - объявление или удаление индекса.
Процедуры sol_ExecuteWithParams
и sol_ExecuteSqlWithParams позволяют использовать
параметры см. подробнее о
параметризации запросов.
int sol_GetResultLen( HFAINDCMD
hCmd ) - возвращается число символов в строке
результата.
Зная размер результата, можно выделить
соответствующий блок памяти перед вызовом sol_GetResult. Обратите
внимание, что используются однобайтовые символы, так как HTML и XML
данные кодируются в utf8.
void sol_GetResult(
HFAINDCMD hCmd, char* buffer ) - строка результатов поиска копируется в
предоставленный буфер. Формат строки зависит от установленного режима (по
умолчанию это XML, см. также вызов sol_GenerateHtml). Для представления символов
используется кодировка utf-8.
int sol_GetError( HFAIND hEngine, wchar_t* buffer, int buffer_len )
Возвращается описание последней возникшей ошибки. Текстовое описание помещается в передаваемый буфер, а возвращаемое значение может использоваться как обобщенный индикатор ошибки: если ошибок не было, то вернется 0, если же ошибки были, то вернется 1. Указатель на текстовый буфер можно задать как NULL, в этом случае текстовое описание ошибки не копируется.
int sol_CountDomains(HFAIND hEngine) - возвращается число актуальных индексов.
int sol_GetDomainsListSize(HFAIND hEngine) - возвращает длину буфера (в символах wchar_t для текущей платформы), необходимую для сохранения результата процедуры sol_GetDomainsList.
int sol_GetDomainsList( HFAIND hEngine, wchar_t Delimiter, wchar_t* Buffer ) - в указанный буфер копируется список имен актуальных индексов, разделяемых задаваемым символом. Размер необходимого буфера можно получить с помощью процедуры sol_GetDomainsListSize.
XmlText* sol_GetDomainsListXml( HFAIND hEngine ) - возвращается указатель на объект, содержащий XML описание списка зон. Для работы с возвращаемым объектом см. процедуру sol_GetXmlText и др.
const wchar_t* sol_GetDomainComment( HFAIND hEngine,
const wchar_t* Domain_Name ) - возвращает указатель на строку
комментария для указанного индекса. Если индекса с заданным именем нет, то
вернется NULL.
int sol_FindDomain( HFAIND hEngine, const
wchar_t* Domain_Name) - выполняется
поиск указанного индекса и возвращается его внутренний числовой идентификатор
(primary key в таблице). В случае отсутствия затребованного индекса
возвращается -1. Так как числовые значение id индексов не используются в
процедурах API, то данная процедура может использоваться только для проверки
доступности индекса по его имени.
int sol_XmlTextLen( XmlText* hXml ) - возвращает длину XML текста.
int sol_GetXmlText( XmlText* hXml, char* Buffer, int BufferSize ) - в заданный буфер копируется я XML форматированный текст.
void sol_DeleteXml( XmlText* hXml ) - удаление объекта.
В ряде случаев вместо непосредственной вставки имен файлов, папок, текста паттернов в текст запроса поискового движка предпочтительно использовать параметризацию. В строке запроса указываются имена параметров, начинающиеся с символа ?. Прикладной код перед парсингом строки запроса процедурами sol_ParseQueryWithParams готовит список значений параметров с помощью процедур sol_CreateParams и sol_AddParam.
Параметры можно использовать в большом количестве команд движка:
1. Имена индексов в команде -index domain=XXX и других командах группы -index. К примеру,
-index domain=?1 -index refresh
2. Имена файлов, папок, URL'ы в командах -file, -dir, -url и других:
-index domain=?1 -dir ?2
3. Тексты паттернов в командах -sample, -regex, -multiword:
-mydocs -wordforms -sample ?1
Имена параметров начинаются с символа ? и могут содержать любые символы, числовые имена используются в примерах только для простоты.
© Mental Computing 2010
Поисковая система
SDK Поисковой системы
Экранный переводчик
|
|
изменено 01-Jul-10 | ||||||||||||||||||||||||||||||||||||||