DataparkSearch сохраняет в базе каждое найденное на страницах слово вместе с номером секции документа, в которой найдено это слово, а также с номером позиции слова в документе. Число появлений каждого слова в документе не влияет на релевантность. Однако номер секции документа, в которой встречается слово, может влиять на релевантность.
На данный момент DataparkSearch поддерживает следующие способы хранения слов для SQL серверов: "single", "multi", "crc", "crc-multi", "cache". Режимом по умолчанию является "single". Способ задаётся параметром dbmode команды DBAddr, указываемой в файлах конфигурации indexer.conf и search.htm.
Примеры: DBAddr mysql://localhost/search/?dbmode=single DBAddr mysql://localhost/search/?dbmode=multi DBAddr mysql://localhost/search/?dbmode=crc DBAddr mysql://localhost/search/?dbmode=crc-multi
Если указан режим хранения "single", все слова сохраняются в одной таблице (или текстовом файле, для втсроенной базы данных) со структурой (url_id,word,weight), где url_id - идентификатор документа, равный значению поля rec_id таблицы "url". Word имеет SQL тип variable char(32).
Если выбран способ хранения "multi", слова будут сохранены в 13 различных таблицах, в зависимости от их длины. Структура этих таблиц идентична структуре таблицы для способа хранения "single", только для Word используется тип char фиксированной длины, что даёт выигрыш в скорости для большинства баз данных. Это делает режим "multi" более быстрым, по сравнению с "single". Этот режим не реализован для встроенной базы данных.
Если выбран способ хранения "crc", DataparkSearch вместо слов будет сохранять их индентификатора, вычесленные как CRC32 сумма от этих слов. Этот режим хранения использует меньше дискового пространства и работает быстрее способов хранения "single" и "multi". Наши тесты показали, что только 250 пар слов из списка в 1.600.000 уникальных слов имеют одинаковую CRC32 сумму. Большая часть этих пар (>90%) содержит по меньшей мере одно слово с ошибкой. Инфоромация о каждом слове хранится в следующей структуре (url_id,word_id,weight), где word_id - 32-битовый идентификатор слова, посчитаный как его CRC32 сумма. Этот режим хранения рекомендуется для больших поисковиков.
Если выбран способ хранения "crc-multi", DataparkSearch хранит CRC32 идентификаторы в нескольких таблицах (или двоичных файлах для встроенной базы данных) с такой же структурой, как и для способа хранения "crc", и в зависимости от лины слова, как при режиме хранения "multi". Обычно это самый быстрый способ и рекомендован для больших поисковиков.
Добавлен новый способ хранения - "cache". Это самый быстрый способ, позволяющий быстро индексировать и искать среди миллионов документов. Смотрите Разд. 5.2 для дальнейшего объяснения.
Учтите, что мы разрабатываем DataparkSearch с использованием PostgreSQL в качестве SQL сервера и зачастую не имеем возможности тестировать каждую новую версию со всеми поддерживаемыми базами данных. Т.е., если для вашей базы данных нет соответсвующей структуры таблиц в директории create/you_database, возьмите в качестве образца структуру для PostgreSQL и создайте по аналогии структуру для вашей базы данных. Структура для PostgreSQL всегда поддерживается в обновлённом состоянии.
Режимы хранения single и multi поддерживают поиск подстрок. Т.к. при использовании режимов хранения crc и crc-multi хранятся не слова сами по себе, а только их CRC-идентификаторы, то осуществить поиск подстрок не представляется возможным.