Индексный файл поисковой системы 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 |