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