Как работает поисковик
Трудно себе представить Интернет без поисковых серверов.
Рэмблер, Яндекс и Апорт являются, пожалуй, самым востребованным сервисом в
российском Интернете, а Yahoo, Excite, Altavista и Infoseek - в Интернете
вообще. А если к ним прибавить всевозможные более мелкие поисковые
сервисы, то вполне вероятно, что время проводимое за чтением информации
окажется меньше того, которое тратится на ее поиск... А задумывались ли вы
о том, как работают поисковики? Попробуйте, например, используя
стандартную поисковую утилиту Windows (кнопка Пуск - Поиск...) найти на
своем локальном компьютере все файлы, в которых встречается, скажем, слово
"screen". Время поиска будет изрядно больше, чем ответ любого из поисковых
Интернет-серверов, хотя информации они обрабатывают намного больше, а
вдобавок еще и логические выражения понимают. Как они этого добиваются?
Все дело в том, что Windows при поиске просто
последовательно читает все файлы и проверяет не встречается ли указанное
слово. Такой способ поиска очень прост в программированни, не требует
предварительной обработки информации и может использоваться, в том числе,
и на небольших сайтах. Как это сделать я писал в заметке Иголка в стогу
сена. Но затраты времени на поиск нужной информации при этом способе очень
резко увеличиваются при росте объема документов, которые надо просмотреть.
И был придуман другой способ - индексирование. Этот
способ включает в себя два этапа: построение индексов и, собственно,
поиск. Индексы - это некоторые таблицы, содержащие ссылки на какую-то
информацию. Например, этап построения индексов состоит в том, что
поисковый сервер бегает по ссылкам, читает всяческие встреченные документы
и для каждого слова, например, "screen" в этом документе, делает следующую
запись в индексном файле: "screen xxx". После этого в файле ссылок делает
запись: "xxx адрес документа". Здесь xxx - это некое внутреннее число или
строка, связывающая записи в этих двух таблицах. Если потом слово "screen"
будет встречено в другом документе, то в первой таблице запись изменится
на "screen xxx yyy", а во второй добавится строка "yyy адрес второго
документа".
Теперь, если пользователь попробует поискать слово
screen, то другая программа (собственно, поисковик) просмотрит индексный
файл, найдет строчку, начинающуюся со screen (а за счет того, что строки
при записи индексного файла сортируются это происходит довольно быстро),
прочитает ссылки xxx и yyy, откроет файл ссылок, найдет строчки xxx и yyy
и выдаст пользователю адреса, соответствующие этим записям. Кстати,
программа Sleuth-hound! позволяет осуществлять индексный поиск на вашем
локальном компьютере, что очень удобно, если у вас много разнообразной
текстовой информации.
Разумеется, описанный способ - это только базовый
принцип, на самом деле - все намного сложнее. Например индексатор должен
как-то помечать слова, которые встречаются в слишком многих документах,
распознавать различные формы слова, как-то помечать слова, находящиеся в
META-тэге, указывать сколько раз слово встречается в документе и т.д.
Поисковая часть должна распознавать логические операции, опять-таки
проверять различные словоформы (а, возможно, и исправлять грамматические
ошибки), как-то рейтинговать полученные результаты, возможно, проверять
наличие и неизменность документа и делать еще кучу всяких дополнительных
вещей.
Так что, в следующий раз, перед тем. как начать ругаться,
что глупая машина опять нашла не то, что вы хотели, попробуйте сначала
подумать о том, какая гигантская работа была проделана... А потом уже
ругайтесь!
Источник: http://listsoft.ru/