API поисковой машины

Где скачать поисковую систему и SDK

Скачать SDK поисковой системы с примерами и другие компоненты можно здесь поисковая система

SDK поискового движка

Скачать SDK поискового движка можно на странице загрузок.

В SDK входит DLL для платформы Windows x86 и несколько примеров вызова API из C++, C# и Delphi кода.

По вопросам лицензирования движка и за консультациями пожалуйста обращайтесь к разработчикам.

О других SDK проекта, включая SDK Грамматического Словаря, можно узнать здесь.

Использование API поисковой системы

Скомпилированная DLL движка находится в SDK: ...\lib\faind.win32.dll. Заголовочный файл с объявлениями процедур для C++ faind.h находится в каталоге ...\include\solarix.

Кроме того, движок при инициализации обязательно потребует, чтобы в текущем каталоге находились некоторые файлы, также включенные в состав SDK:

1. файл локализованных ресурсов faind.lang и сопутствующие файлы faind.lang.ru, faind.lang.en и т.д.;

2. файлы скомпилированного словаря, а именно файл каталога словаря dictionary.xml.

Для использования поисковой системы в программах на Delphi в составе SDK есть готовый интерфейсный модуль ...\include\solarix\SearchEngineAPI.pas.

На платформе .NET можно использовать готовую обертку search_engine_fx.dll, которая вместе с исходными текстами входит в SDK.

Набор экспортируемых из faind.win32.dll процедур

Вы можете заметить, что набор доступных процедур 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. Во многих случаях можно не указывать имя реального конфигурационного файла, чтобы поисковик выполнил инициализацию некими значениями по умолчанию, зашитыми в код.

Загрузка грамматического словаря

int sol_LoadDictionaryW( HFAIND hEngine, const wchar_t * Filename )

int sol_LoadDictionaryA( HFAIND hEngine, const char * Filename )

int sol_LoadDictionary8( HFAIND hEngine, const char * FilenameUtf8 )

Если задание пути к файлам грамматической подсистемы в конфигурационном файле по каким-то причинам не может быть использовано, то можно загружать грамматический словарь программно, указывая при вызове функций sol_LoadDictionary путь к файлу конфигурации словаря. Обычно этот файл имеет имя dictionary.xml и содержит полное описание загружаемых подсистем и их параметры.

Различие между тремя вариантами функции заключается в кодировке строки с файловым путем. Функция с суффиксом W получает строку из широких символов, с суффиксом A в однобайтовой ASCII кодировке, а с суффиксом 8 в кодировке utf8.

В случае успешной загрузки возвращает 1.

Загрузка плагинов

int sol_LoadPluginsW( HFAIND hEngine, const wchar_t * Folder, int Flags )

int sol_LoadPluginsA( HFAIND hEngine, const char * Folder, int Flags )

int sol_LoadPlugins8( HFAIND hEngine, const char * FolderUtf8, int Flags )

По умолчанию поисковый движок ищет плагины в подкаталоге plugins в каталоге запуска. Это можно изменить в конфигурационном файле, который загружается функцией sol_ReadIni. Однако изменение единственного настроечного параметра в большом ini-файле может быть не очень удобным, в таком случае можно программно задать путь к папке с плагинами, воспользовавшись одной из вышеперечисленных функций.

Плагины загружаются непосредственно при вызове функций. Это позволяет сразу проконтролировать успешность инициализации, в отличие от обычного процесса 'ленивой' загрузки плагинов при первом поиске по файлам.

В ходе загрузки плагинов поисковая система рекурсивно просматривает указанный каталог со всеми вложенными подкаталогами, ищет файлы с расширением dll и пытается загрузить их как плагины. Благодаря тому, что плагины имеют специальные функции для описания своих функций, поисковая система сама определяет назначение плагина - извлечение текста, распаковка и так далее.

Различие между тремя вариантами функции заключается в кодировке строки с именем папки. Функция с суффиксом W получает строку из широких символов, с суффиксом A в однобайтовой ASCII кодировке, а с суффиксом 8 в кодировке utf8.

Возвращается количество загруженных плагинов.

Чтобы проконтролировать список загруженных плагинов, можно вызвать отладочную команду sol_Execute("-help=12"), которая распечатает список названий плагинов в текущую текстовую консоль (см. описание команды -help). Функция sol_Execute выполняет любую команду поисковой системы, заданную посредством текстовой строки, она описана далее.

Начальная инициализация поисковой системы в портабельном режиме

HFAIND sol_CreatePortableSearcher( int flags )

Отличается от sol_CreateSearchEngine последующим функционированием поискового движка, а также отсутствием необходимости выполнять вторую часть инициализации посредством вызова sol_ReadIni.

В портабельном режиме появляется удобная возможность работать с индексированными документами, распространяемыми на CD вместе с индексной базой.

Особенности работы поисковой системы следующие:

1. Движок не загружает и не использует список индексов с диска, как это обычно делает поисковая система. Вместо этого прикладная программа должна явно указать движку, что для поиска будет использоваться индексная база, расположенная в определенном каталоге (на DVD или жестком диске), с помощью вызова sol_AttachPortableIndex.

2. В качестве имени индекса в команде -index domain используется путь к индексу, указанный в sol_AttachPortableIndex.

3. Проиндексированные документы должны размещаться в том же каталоге, что и индексная база. Движок во время поиска автоматически будет переправлять файловые пути найденных документов так, чтобы они указывали на каталог базы. Таким образом, Вы можете создавать индекс консольной утилитой или оконной поисковой системой а затем скопировать индексную базу и документы в каталог на DVD и искать по нему с помощью DLL поискового движка. В составе SDK есть исходные тексты демонстрационных программ, реализующих весь цикл работы с портабельным индексом - создание и выполнение запросов.

Подключение поискового индекса, находящегося в папке

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>. Это позволяет прикладному коду добавить к результатам собственные элементы оформления, например форму для ввода параметров поиска.

Call-back функции для трассировки выполнения поиска

Для увеличения юзабилити прикладного кода при выполнении некоторых времяемких операций типа поиска можно задавать 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_AddParamHFAINDPARAMS hParamsconst wchar_t* ParamNameconst wchar_t* ParamValue )

Возвращает:

    -1 - ошибка добавления;

    >=0 - параметр успешно добавлен.

API не контролирует повторное добавление параметра с тем же именем, порядок замены параметров на их значения в этом случае не определен.

Удаление блока параметров

int sol_DeleteParamsHFAINDPARAMS 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)

HFAINDCMD sol_ParseQueryForText( HFAIND hEngine, const wchar_t *query, const wchar_t *text )

Синтаксис всех команд описан здесь.

Возвращает:

Дескриптор для объекта с подготовленным контекстом для исполнения команды. Подготовленная команда исполняется вызовом 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_SearchText( HFAIND hEngine, const wchar_t*query, const wchar_t*text )

0 - команда успешно выполнена;

-1 - при выполнении возникла ошибка.

Результаты поиска

Получение длины текстового буфера для сохранения результатов поиска

int sol_GetResultLen( HFAINDCMD hCmd ) - возвращается число символов в строке результата.

Зная размер результата, можно выделить соответствующий блок памяти перед вызовом sol_GetResult. Обратите внимание, что используются однобайтовые символы, так как HTML и XML данные кодируются в utf8.

Копирование результатов поиска в текстовый буфер

void sol_GetResult( HFAINDCMD hCmd, char* buffer ) - строка результатов поиска копируется в предоставленный буфер. Формат строки зависит от установленного режима (по умолчанию это XML, см. также вызов sol_GenerateHtml). Для представления символов используется кодировка utf-8.

Получение длины буфера для сохранения сообщения об ошибке

int sol_GetErrorLen( HFAIND hEngine )

Копирование текста последней ошибки в текстовый буфер

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

Имена параметров начинаются с символа ? и могут содержать любые символы, числовые имена используются в примерах только для простоты.

Дополнительные материалы

Условия использования SDK

Команды поискового движка

Задание области поиска

Задание паттерна поиска

Плагины поисковой системы

Консольная поисковая утилита

Настольная поисковая система

Алгоритмы русской морфологии

  © Elijah Koziev 2010
прикладные проекты на основе грамматического словаря API грамматической машины компоненты для доступа к грамматическому словарю условия получения SDK токенизатор и сегментатор морфологический анализ и синтез лемматизатор база N-грамм синтаксический анализатор словоформы морфология и синтаксис русского языка падеж число род совершенный и несовершенный вид экспорт в SQL формат экспорт в XML формат скрипт SQL словаря структура SQL словаря структура XML словаря компоненты для доступа к грамматическому словарю ORM Persistent Dictionary Library лемматизация стемминг примеры использования грамматического словаря склонение существительных в русском языке склонение русских прилагательных спряжение глаголов в русском языке поиск текста с учетом морфологии OCR подсистема расширенные регулярные выражения генератор текста генератор случайного текста и имитатор рандомизатор синонимизатор перефразировщик Статистика буквенных паттернов

Грамматический словарь русского языка



Грамматический словарь
склонение и спряжение глаголов, существительных, прилагательных

В состав входит русский и английский словарь.

платформа:  Windows 2000 ... Windows 7
требования: 512 Mb свободной памяти, 300 Мб на диске
размер:         34 Мб

  скачать грамматический словарь купить грамматический словарь SDK грамматического словаря
грамматический словарь русского языка



SDK Грамматического словаря



SDK Грамматического Словаря
склонение и спряжение глаголов, существительных, прилагательных

В состав входит русский и английский словарь.

платформа:  Windows 2000 ... Windows 7
размер:         13 Мб

SQL словарь (демо):
sqlite mysql oracle firebird mssql

скачать демо-версию SDK купить SDK API грамматического словаря



Поисковая система



Integra
настольная и сетевая поисковая система 

платформа:  Windows XP ... Windows 7
требования: 512 Mb свободной памяти
размер:         21 Мб

Дополнительные компоненты:
MySQL поисковый сервер 13.5 Мб
Integra.Premium MySQL 3.9 Мб

скачать поисковую систему SDK поисковой системыописание поисковой системы



SDK Поисковой системы



SDK Поискового движка
API для настольной и сетевой поисковая система 

платформа:  Windows XP ... Windows 7
размер:         17 Мб

Дополнительные компоненты:

MySQL поисковый сервер 13.5 Мб
Integra.Premium MySQL 3.9 Мб

скачать SDK SDK поисковой системы



Экранный переводчик



Translator
экранный переводчик

платформа:  Windows XP ... Windows 7
требования: 256 Mb свободной памяти
размер:         4.4 Мб

Дополнительные компоненты:
расширенный англо-русский словарь 6.4 Мб


скачать экранный переводчикописание экранного переводчика



изменено 25-Aug-11