FLUIdS
API поиска


Идеалогия API поиска

Начиная с версии 4.1 FLUIdS предоставляет возможность создания индивидуального поиска в индексных файлах системы через использование API поиска. API поиска представляет собой набор вызовов, реализуемых в статической библиотеке libflus.lib или динамической libflus.so (libflusd.dll) и описываемых в заголовочных файлах fluidss.h/fluidssd.h. Библиотеки и заголовочные файлы генерируются при выполнении команды

make libs

в директориях ./lib и ./include соответственно. Все вызовы API являются потоконезависимыми, если, конечно, для каждого потока применяется свой собственный поисковик. Встроенный в API механизм блокировок отсутствует.

Ниже приведен пример написания программы с использованием API поиска:


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "fluidss.h"

void main( void )
{
  struct flu_searcher_t searcher;
  struct flu_searcher_result_t *result;
  const char *indexFile = "index.flu";

/* Проинициализируем глобальные переменные */
  fluInit();

/* Подготавливаем поиск */
  if( !fluSearcherInit(             /* Инициализация... */
         &searcher,                    /* поисковик */
         NULL,                         /* ошибки игнорируем */
         NULL,                         /* считаем, что памяти много */
         NULL                          /* дополнительная информация */
       ) ||
      !fluSearcherSetParams(        /* Параметры поиска... */
         &searcher,                    /* поисковик */
         fst,                          /* область поиска */
         0,                            /* флаги поиска */
         20,                           /* пропустить первых 20 результатов */
         10                            /* запомнить следующие 10 результатов */
       ) ||
      !fluSearcherSetQuery(         /* Установим запрос... */
         &searcher,                    /* поисковик */
         "crime and punishment"        /* собственно запрос */
       ) )
  {
    fluSearcherFree( &searcher );
    exit( -1 );
  }

/* Осуществляем поиск */
  if( !fluSearcherMakeSearch(       /* Поиск... */
         &searcher,                    /* поисковик */
         1,                            /* ищем в одном индексном файле */
         &indexFile,                   /* список файловых имен индексов */
         NULL,                         /* список псевдонимов индексных файлов */
         NULL                          /* дополнительная информация для каждого индекса */
       )
  {
    fluSearcherFree( &searcher );
    exit( 1 );
  }

/* Печатаем результаты поиска */
  fluSearcherInitResult( &searcher, fsfNoExtract);
  while( (result = fluSearcherNextResult( &searcher )) != NULL )
    printf( "%d: %s\n", result->number+1, result->url);

/* Высвобождаем память и закрываем файлы */
  fluSearcherFree( &searcher );

/* Все! */
  exit( 0 );
}


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