# FLUIdS
API поиска

- Идеалогия API поиска
- Основные типы и структуры
  - struct flu_searcher_t
  - struct flu_searcher_indexfile_t
  - struct flu_searcher_result_t
  - flu_searcher_printerror_t
  - flu_searcher_memfail_t
  - flu_searcher_printresult_t
- Вызовы API
  - fluSearcherInit
  - fluSearcherFree
  - fluSearcherSetParams
  - fluSearcherSetQuery
  - fluSearcherMakeSearch
  - fluSearcherPrintResults
  - fluSearcherInitResult
  - fluSearcherNextResult
  - fluSearcherErrorString

| Идеалогия 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