Индексный файл поисковой системы FLUIdS состоит из заголовка и набора секций:
Секции могут быть пустыми (нулевой длинны), однако присутствие в индексном
файле заголовка и трека слов обязательно. С учетом четырех нулевых байтов,
которые в обязательном порядке записываются в конец секции записей, и
четырех-байтового выравнивания секций минимальный размер
индексного файла составляет
| Заголовок |
Заголовок индексного файла состоит из двух частей:
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];
};
Здесь:
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 |