FLUIdS
API поиска:
Вызовы API


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
);

Параметры:

Возвращаемые значения:

По окончании работы вызова некоторые поля поисковика приобретают действительные значения:
Пример:

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, предназначен для выдачи запрошенных результатов поиска:


Boolean fluSearcherPrintResults
(
    struct flu_searcher_t *fs,
    flu_searcher_printresult_t printResult,
    unsigned int flags
);


fluSearcherInitResult

Вызов fluSearcherInitResult подготавливает поисковик к выдаче запрошенных результатов поиска:


Boolean fluSearcherInitResult
(
    struct flu_searcher_t *fs,
    unsigned int flags
);

Параметры:
  • fs - указатель на поисковик.
  • flags - флаги, влияющие на выдачу результатов:
    • fsfShortForm - не заботиться о заголовке и отрывке текста проиндексированного документа, соответствующего результату поиска.

Возвращаемые значения:
  • False - отсутствуют зарегистрированные результаты поиска;
  • True - можно приступать к выборке результатов поиска.


fluSearcherNextResult

Последовательные вызовы fluSearcherNextResult позволяют получить все зарегистрированные результаты поиска:


struct flu_searcher_result_t *fluSearcherNextResult
(
    struct flu_searcher_t *fs
);

Параметры:
  • fs - указатель на поисковик.

Возвращаемые значения:
  • NULL - закончились зарегистрированные результаты поиска;
  • иначе - указатель на текущий результат поиска.

Перед тем, как осуществлять вызовы fluSearcherNextResult, поисковик нужно подготовить вызовом fluSearcherInitResult:


fluSearcherInitResult( &searcher, 0);
while( (result = fluSearcherNextResult( &searcher )) != NULL )
{
  /* Выдаем данные результата поиска */
}


fluSearcherErrorString

Вызов fluSearcherErrorString используется для получения строки сообщения о произошедшей ошибке:


const char *fluSearcherErrorString
(
    struct flu_searcher_t *fs,
    unsigned zint_t errorCode,
    const char *name
);

Параметры:
  • fs - указатель на поисковик.
  • errorCode - код ошибки.
  • name - дополнительный строковый параметр, относящийся к ошибке.

Возвращаемые значения:
  • NULL - закончились зарегистрированные результаты поиска;
  • иначе - указатель на текущий результат поиска.

Вызов fluSearcherErrorString предназначен для применения исключительно внутри функции printError, поскольку fluSearcherErrorString при генерации сообщения использует дополнительные данные поисковика, запасенные в поле context. При этом параметры errorCode и name без изменения передаются от printError к fluSearcherErrorString:


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);
}

Попытка прямого вызова fluSearcherErrorString с заданными errorCode и name может закончиться крушением поисковика.


На предыдущую страницу valera@sbnet.ru