fluSearcherInit |
Функция fluSearcherInit инициализирует поисковик:
Boolean fluSearcherInit ( struct flu_searcher_t *fs, flu_searcher_printerror_t printError, flu_searcher_memfail_t memoryFail, void *info );
Ниже представлен пример использования вызова fluSearcherInit с обработкой ошибок:
... #include "fluidss.h" ... static void myPrintError( struct flu_searcher_t *fs, unsigned zint_t errorCode, const char *name) { strncpy( (char *) fs->info, fluSearcherErrorString( fs, errorCode, name), 1024); ((char *) fs->info)[1023] = '\0'; } static void myMemoryFail( struct flu_searcher_t *fs, const char *name) { fprintf( stderr, "No more free memory :(\n"); exit( -1 ); } int makeSearch( ..., char *errorBuf) { struct flu_searcher_t fluSearcher; ... /* Инициализируем поисковик */ *errorBuf = '\0'; if( !fluSearcherInit( &fluSearcher, myPrintError, myMemoryFail, errorBuf) ) return -1; ... /* Ищем */ ... fluSearcherFree( &fluSearcher ); ... return 0; } ...
В этом примере память под поисковик запасена в локальной автоматической переменной fluSearcher. В случае возникновении ошибки работы поисковика сообщение об этой ошибке сохраняется в буффере errorBuf, и выполнение программы не прерывается (из функции myPrintError не вызывается exit()). Если же возникла ситуация нехватки свободной оперативной памяти, то на STDERR будет выдано об этом сообщение, и работа программы будет аварийно прервана (вызовом exit() из функции myMemoryFail).
fluSearcherFree |
Функция fluSearcherFree очищает и разрущает поисковик. При ее выполнении высвобождается вся ранее занятая под нужды поисковика память и закрываются индексные файлы, участвовавшие в поиске. Вызов fluSearcherFree нужно совершать не только по окончании работы поисковика, но и после возникновения любой критической ошибки. Прототип функции:
void fluSearcherFree ( struct flu_searcher_t *fs );
fluSearcherSetParams |
Вызов fluSearcherSetParams устанавливает некоторые параметры, которые существенным образом влияют на накопление результатов поиска в поисковике:
Boolean fluSearcherSetParams ( struct flu_searcher_t *fs, unsigned int searchArea, unsigned int searchFlags, int startNumber, int resultCount );
В приведенном ниже фрагменте кода, демонстрирующего применение fluSearcherSetParams, для поисковика устанавливается область поиска в контент и заглавие документов; декларируется, что поиск будет вестись с учетом регистра букв в запросе; первые (по значимости) десять результатов поиска будут пропущены; остальные же будут зарегистрированы (сколько бы их там не было; об этом можно судить по отрицательному значению параметра resultCount):
... if( !fluSearcherSetParams( fs, FS_AREA_CONTENT | FS_AREA_TITLE, fsfCaseDepend, 10, -1) ) { fluSearcherFree( fs ); exit( -1 ); } ...
fluSearcherSetQuery |
Вызов fluSearcherSetQuery предназначен для компиляции пользовательского запроса:
Boolean fluSearcherSetQuery ( struct flu_searcher_t *fs, const char *query );
Копия пользовательского запроса и результат его компиляции сохраняется в поисковике в полях query и q соответственно.
fluSearcherMakeSearch |
Вызов fluSearcherMakeSearch непосредственно осуществляет поиск:
Boolean fluSearcherMakeSearch ( struct flu_searcher_t *fs, int count, const char **indexes, const char **aliases, void **infos );
при отрицательном же значении resultCount - это
(если отсчет порядковых нумеров N вести с нуля).
int makeSearch( struct flu_searcher_t *fs, ...) { const char *indexes[3]; void *infos[3]; int nums[3]; int secs, msecs; ... indexes[0] = "index1.flu"; nums[0] = 1; infos[0] = &nums[0]; indexes[1] = "index2.flu"; nums[1] = 2; infos[1] = &nums[1]; indexes[2] = "index3.flu"; nums[2] = 3; infos[2] = &nums[2]; if( !fluSearcherMakeSearch( fs, 3, indexes, NULL, infos) ) { fluSearcherFree( fs ); return -1; } zSubTimeValue( fs->endTime, fs->startTime, &secs, &msecs); printf( "Время поиска - %d.%.3d секунд\n", secs, msecs); printf( "Найдено результатов поиска - %u\n", (unsigned int) fs->foundCount); ... return 0; }
В этом примере осуществляется поиск по трем индексным файлам, по окончании которого на экран печатается время поиска и общее число результатов поиска.
fluSearcherPrintResults |
Вызов fluSearcherPrintResults, как и пара вызовов
Вызов fluSearcherInitResult подготавливает поисковик к выдаче
запрошенных результатов поиска:
Последовательные вызовы fluSearcherNextResult позволяют получить
все зарегистрированные результаты поиска:
Перед тем, как осуществлять вызовы fluSearcherNextResult,
поисковик нужно подготовить вызовом
fluSearcherInitResult:
Вызов fluSearcherErrorString используется для получения строки
сообщения о произошедшей ошибке:
Вызов fluSearcherErrorString предназначен для применения исключительно
внутри функции printError,
поскольку fluSearcherErrorString при генерации сообщения использует
дополнительные данные поисковика, запасенные в поле
context.
При этом параметры errorCode и name без изменения передаются от
printError к
fluSearcherErrorString:
Попытка прямого вызова fluSearcherErrorString с заданными
errorCode и name может закончиться крушением поисковика.
Boolean fluSearcherPrintResults
(
struct flu_searcher_t *fs,
flu_searcher_printresult_t printResult,
unsigned int flags
);
fluSearcherInitResult
Boolean fluSearcherInitResult
(
struct flu_searcher_t *fs,
unsigned int flags
);
fluSearcherNextResult
struct flu_searcher_result_t *fluSearcherNextResult
(
struct flu_searcher_t *fs
);
fluSearcherInitResult( &searcher, 0);
while( (result = fluSearcherNextResult( &searcher )) != NULL )
{
/* Выдаем данные результата поиска */
}
fluSearcherErrorString
const char *fluSearcherErrorString
(
struct flu_searcher_t *fs,
unsigned zint_t errorCode,
const char *name
);
void myPrintError( struct flu_searcher_t *fs, unsigned zint_t errorCode, const char *name)
{
const char *errorString = fluSearcherErrorString( fs, errorCode, name);
fprintf( stderr, "ERROR: %s\n", errorString);
}
На предыдущую страницу
valera@sbnet.ru