| 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