To [VS]:
Ок, убедил. Готов согласиться, что релевантность не так уж плоха, хотя по преднему считаю, что для небольших сайтов ее роль не слишком велика. Но все равно сегодня написал новую версию (на Перле, поскольку его лучше знаю). Посмотреть можно тут:
http://risearch.org/cgi-bin/demo/pro_dist/search.pl
Была проиндексирована документация на ПХП и Перл (3500 документов, 20 Мб). При поиске учитывается как число слов в документе, так и расстояние между ключевыми словами (там наверное нужно еще с коэффициентами поиграть для улучшения результатов, но и так работает). Размер индекса правда сильно вырос (9 Мб, то есть почти 50% от исходных данных), но меня сейчас больше волновал вопрос скорости доступа к данным, поэтому в индексе есть избыточная информация.
To PartizaneN:
Код хеш-таблицы я кидал сюда: http://phpclub.net/talk/showthread.php?s=&threadid=25325&rand=17. Он на Перле, но там все функции имеют прямые аналоги в ПХП, поэтому проблем быть не должно.
>И... не пытайся влезть в дебри перла через пхп.
Тут видишь какая проблема, в дебри Перла я залез достаточно давно... И не хочу вылезать, нравится мне там.
To alex_great:
Это сложный вопрос, причем решать его нужно начиная с постановки задачи. Свой поиск я писал для ныне заброшенного сайта http://bukinist.agava.ru/, причем вся инфа у меня была на локальном компьютере, ее не нужно было выкладывать на сайт, а поиск нужен на сайте. Значит нужна переносимость индекса. Если я правильно понял, ни MySQL, ни Berkley DB переносимость гарантировать не могут. В инете я ничего подходящего по мощности не нашел, пришлось самому писать. А вообще, поисковый индекс и реляционные базы мало совместимы. Не нужны богатые возможности базы для этого индекса. И ни одна большая поисковая система не хранит индекс в базе. Хотя для небольших объемов это может работать, и даже быть удобным из-за легкости реализации динамического индекса.
При построении хеш-таблицы прямо на диске возникают проблемы с построением индекса. Словарь то легко обновлять, а вот как писать индекс, который должен расти? Придется делать его блочным, но тогда появятся дырки. Если блоки малы, скорость поиска будет тоже мала. При больших блоках индекс займет много места. У меня есть скрипт, который делает индекс на диске. Тестировал его на 1.5 Гб данных. Если поиск возвращает порядка 10000 документов, все хорошо. Если 50000 и больше - тормозит.