Индекс — слово, которое постоянно упоминается в связи с поисковыми машинами. Увы, большинство пользователей Интернета до сих пор довольно смутно представляют себе, что это такое. Хотя, как уже говорилось выше, ничего сложного в этом понятии нет, более того, ему много веков, и каждый из нас встречался с индексом в виде предметного указателя книги еще до своего первого выхода в Интернет.
Давайте рассмотрим процесс индексирования текста подробнее и разберемся с устройством индекса. Вот какие шаги выполняет поисковая машина для создания индекса из выкачанных веб-страниц.
Для начала текст индексируемой страницы нужно очистить от всяких нетекстовых элементов — графики, разметки (тегов) языка HTML и прочего "мусора". В результате получается чистый текст, с которым дальше работает индексный робот.
Все слова нужно выбрать из текста, чтобы затем расположить их по алфавиту. Для этого поисковик должен знать, что именно считается словом — последовательность букв (и какого именно алфавита), числа, буквенно-цифровые последовательности, слова с дефисом и т.п., а также, что словом не считается и пропускается (пробелы, знаки препинания и пр.). Ниже мы расскажем об этом чуть подробнее. А сейчас лишь заметим, что у каждого поисковика есть свое определение того, что считать словом в тексте (стандарта здесь, увы, не существует).
Итак, поисковик выбирает из текста все, что считает словами, и собирает их в отдельный список.
В большинстве поисковых машин слова не заносятся в индекс в том виде, в котором они приведены в тексте.
Обычно на этапе выборки слов из текстов веб-страниц поисковая машина применяет какой-то свой алгоритм лингвистической обработки слов, а именно, приведения слов к их начальным грамматическим формам, или основам (к именительному падежу, грубо говоря). Этот алгоритм называется машинной морфологией. Делается это для экономии места в индексе и, что более важно, для более точного поиска.
По поводу использования машинной морфологии в поисковиках также бытует довольно много мифов и домыслов, так что ниже, в отдельном разделе, мы специально коснемся этого вопроса. Пока же достаточно сказать, что машинная морфология служит для замены слов на их основы в индексе поисковика.
Собранные вместе основы всех слов из всех текстов сводятся в индекс — своеобразный словарь, в котором основы упорядочены по алфавиту, а при каждой основе записано, с какой страницы она взята (номер страницы) и на каком месте на этой странице данная основа стояла (номер вхождения). Основы в словаре упорядочиваются по алфавиту для удобства поиска по ним.
Таким образом, индексная запись имеет следующую структуру:
ОСНОВА /номер страницы + номер вхождения / номер страницы + номер вхождения / номер страницы + номер вхождения / ....
Конечно, в реальности для экономии места и повышения скорости использования индекса его структуру всячески оптимизируют и усложняют. Например, вместо основ в индексе хранят их номера (так как номера короче и имеют фиксированную длину), а основы хранят отдельно; номера страниц пишут не всякий раз, а только единожды для всех вхождений с данной страницы, и т.д. Затем индекс упаковывают для экономии места, еще раз индексируют для ускорения доступа и т.д.
Но общая идея индексной записи именно такова, как описано выше.
"Координатный" индекс
Первые интернет-поисковики (середины 1990-х годов) не запоминали местоположение слова на странице. В индекс записывался только список страниц, на которых встретилось данное слово. Это делалось для экономии места и для того, чтобы получить более простую структуру индекса, другими словами, для более быстрого доступа к индексу.
Однако это ограничение не позволяло достаточно точно определить релевантность страницы при поиске словосочетаний. Ведь поисковик не мог различить компактное вхождение слов запроса, когда они стоят рядом, в одной фразе, от разнесенного вхождения, когда одно слово запроса, скажем, находится в правом верхнем углу страницы, а второе — в левом нижнем.
В результате для многословных запросов релевантность была практически нулевой. Так, например, был устроен поисковик Рамблера вплоть до 1999 года.
С ростом числа многословных запросов (а их доля все время растет по мере роста числа грамотных пользователей) и по мере развития поисковых технологий большинство популярных поисковиков перешли на индекс, учитывающий координату слова на странице. Такой индекс называется координатным.
Учет компактных вхождений слов запроса в координатном индексе позволяет не только более аккуратно "взвешивать" релевантность страницы, но и показывать наиболее подходящую цитату из текста страницы.
Как видим, индекс представляет собой обращенную, вывернутую "наизнанку копию всех страниц Интернета. Если в обычном тексте мы идем от странице к словам, то в индексе поисковая машина идет от слов к страницам. Поэтому индекс поисковой машины называется инвертированным ИЛИ инверсным, т.е. обращенным, перевернутым.
А откуда же берется цитата в поисковых результатах? Ведь порядка слов в тексте в инвертированном индексе явно нет. Неужели поисковик восстанавливает текст страницы по этому вывернутому "наизнанку" индексу?
Нет, хотя этой возможно технически, гораздо проще и экономнее для показа цитат хранить еще и второй индекс, так называемый прямой. Этот прямой индекс есть, по сути, сжатая текстовая копия всего Интернета.
Чтобы показывать при найденных страницах цитаты с выделенными (подсвеченными) словами запроса, поисковые машины хранят все тексты всех проиндексированных страниц. Хранят, конечно, в сжатом, упакованном виде, без HTML-разметки, графики и прочего "мусора", в чисто текстовом виде. Но в любом случае поисковая машина хранит у себя на серверах копию всего Интернета, выкачанного ее индексным "пауком".
Для хранения текстовой копии страниц инверсный индекс не подходит — слишком долго каждый раз при отображении цитаты восстанавливать порядок слов в тексте. Гораздо проще хранить второй индекс, на жаргоне разработчиков называемый прямым. Он представляет собой тексты веб-страниц, очищенные от всех нетекстовых элементов, сжатые и упакованные, и является текстовой копией всего Интернета.
Например, Google имеет у себя текстовую копию всего мирового Интернета (в том объеме, до какого смог добраться его "паук"), а Яндекс — копию всего Рунета.
Именно наличие этой текстовой копии позволяет поисковым машинам не только показывать релевантные цитаты в результатах поиска, но и иметь функцию "восстановить текст страницы", которой удобно пользоваться, если сама нужная страница в данный момент недоступна или вообще уже удалена с сайта.