FLUIdS
Структура индексного файла

Индексный файл поисковой системы FLUIdS состоит из заголовка и набора секций:

Секции могут быть пустыми (нулевой длинны), однако присутствие в индексном файле заголовка и трека слов обязательно. С учетом четырех нулевых байтов, которые в обязательном порядке записываются в конец секции записей, и четырех-байтового выравнивания секций минимальный размер индексного файла составляет 32 + 4 * 32 + (255 * 2 +2) + 4 или 616 байт.


Заголовок

Заголовок индексного файла состоит из двух частей:

общая информация об индексном файле
Эта информация занимает 32 байта и описывается структурой indexheader_t файла ~/src/fluids/libflu/indxfile.h:

        struct indexheader_t
        {
          unsigned char id[4];
          unsigned char version;
          unsigned char subversion;
          unsigned char checksum;
          unsigned char charset;
          unsigned zint_t wordCount;
          unsigned zint_t fileCount;
          zoff_t fileSize;
          ztime_t timeStamp;
          unsigned char reserved[INDEX_HEADER_RESERVED];
        };

Здесь:

Эта информация об индексном файле в удобном для изучения виде может быть получена с помощью программы fldump.

список секционных оффсетов
Для каждой секции индексного файла указывается ее начало и ее конец в виде прямого смещения относительно начала файла. Конец каждой секции выровнен по четырехбайтовой границе, поэтому начало следующей секции не обязано совпадать с концом предыдущей, откуда и возникает необходимость хранить в индексном файле не только смещение начала секции, но и его конца. Помимо своего прямого назначения - обеспечивать быстрый доступ к секциям, список секционных оффсетов активно используется в момент открытия индксного файла на предмет проверки его целостности.
В исходных текстах FLUIdS списку секционных оффсетов отвечает элемент offsets структуры indexfile_t (файл ~/src/fluids/libflu/indxfile.h):

      zoff_t offsets[INDEX_OFFSET_COUNT];

На данный момент INDEX_OFFSET_COUNT определена как 32, т.е. максимальное количество разрешенных секций - 16. Из них используется только 8. По мере развития поисковой системы число используемых секций будет возрастать.


Строковая информация

При создании индексного файла эта информация берется из директив IndexName, IndexDescription, IndexPointer и IndexAdmin конфигурацинного файла индексации. В настоящий момент никак не используется, однако ее выводит программа fldump.


Записи проиндексированных слов

Записи проиндексированных слов - основа индексного файла. Секция состоит из записей вида:

длина записи проиндексированное слово ссылка на файл #1 ссылка на файл #2 ... ссылка на файл #N

То есть каждому проиндексированному слову ставится в соответствие набор проиндексированных файлов, в которых данное слово всречается. Записи располагаются в отсортированном по словам порядке, что позволяет осуществлять поиск по запросам вида "abc*". Каждая ссылка на файл состоит из порядкового номера проиндексированного файла, относительного рейтинга пары слово-файл и "структуры" ссылки (регистр слова и область поиска). Ссылки отсортированы по порядковому номеру файла, что позволяет дополнительно упаковать запись и заодно увеличить скорость поиска.

Ссылка описывается структурой entryitem_t (файл fluids/libflu/entry.h):

        struct entryitem_t
        {
          _fn_t filenum;
          _rn_t rank;
          _st_t structure;
          struct entryitem_t *next;
        };

Сама запись представляется структурой wordentry_t, считывается и записывается подпрограммами ioReadWordEntry и ioWriteWordEntry (файл fluids/libflu/indio.h).


Трек слов


Список стоп слов


Список действительных слов


Записи проиндексированных файлов


Файловые оффсеты


Файловые структуры


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