Re[2]: Требуется база данных с индексированием подстрок
От: Elifant  
Дата: 07.01.04 19:35
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

E>>Full text index, имеющийся в MySQL, помочь не может, так как индексирует лишь целые слова, слишком короткие или частые игнорирует и т.д.

iT>Проиндексировать все подстроки практически невозможно — их слишком много.
iT>Реально индекс все-таки можно строить только по словам.

На самом деле можно... Изложу для примера то, как я собираюсь в своей программе индексировать подстроки.
Вся информация о файлах хранится отдельно в таблице. А индекс содержит записи вида:
{"номер файла", "номер первого символа"}. Т.е. например есть файл "video.avi" под номером 100, тогда
в индексе ему будут соответствовать записи:
{100, 1}, {100, 2}, ..., {100, 9}, т.е. по кол-ву символов.
Условно этим записям соответсвует: {100, "video.avi"}, {100, "ideo.avi}, ..., {100, "i"}, но сами подстроки в индексе не хранятся! И уже эти записи упорядочены.
Получаем индекс с большим кол-вом записей (сумма длин всех имен файлов), но фиксированного небольшого размера.

iT>Если не работает (или ты не можешь настроить? или действительно он так устроен?) стандартный полнотекстовый индексатор — напиши свой. Это не так сложно.


Полнотекстовый индексатор описан достаточно подробно и не настраивается — он действительно не подходит.
Насчет написания — этим и начал зниматься. Только вот проблемка: само индексирование действительно очень несложно, я его выше вкратце описал. Меня очень смущает другое: фактически мне же придется писать и базу, т.е. очевидно весь индекс в память не влезет, нужно как-то читать с диска по частям, на диске индекс тоже видно придется хранить индекс в виде группы файлов, чтобы при вставке не переписывать весь индекс целиком и т.д.
Получается, то, что мне нужно, займет от силы 5%, остальные 95% — изобретение ещё одного велосипеда, причем с квадратными колесами.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.