Пауки не останавливаются. Они ползают. Они находят новые страницы, обновляют старые и никогда на самом деле не завершают свою работу. Интернет меняется слишком быстро, чтобы можно было говорить о полном охвате. Но как только данные собраны, начинается настоящая работа. Системе нужно их сохранить. Нужно сделать их доступными для поиска.
Это не просто выгрузка текста в папку. Здесь важны две вещи. Во-первых, какие данные вы сохраняете? Во-вторых, как вы их организуете?
Почему простое хранение не работает
Представьте поисковую систему, которая запоминает только слово и URL, где оно встретилось. Это бесполезно. Вы получите одинаковый результат для слова «bank» на финансовом сайте и для слова «bank» на странице туристического сайта о реке. Никакого контекста. Никакого ранжирования.
Настоящей системе нужно больше. Она отслеживает частоту. Она считает, как часто встречается термин. Она учитывает позицию. Слова в заголовке важнее слов в подвале. Важны слова в ссылках. Важны слова в мета-тегах. Каждый фактор получает свой вес.
Эта система взвешивания является проприетарной. Google использует одну формулу. Bing — другую. Именно поэтому один и тот же запрос дает разные результаты на разных платформах. Не существует единственного «правильного» порядка результатов. Есть только разные алгоритмы, отдающие приоритет различным сигналам.
Плотная упаковка данных
Место для хранения стоит денег. Инженеры сжимают данные. В оригинальном техническом документе Google описывается использование всего двух байт (16 бит) для хранения сложных метаданных для одного вхождения слова.
В этих 16 битах:
— 2–3 бита могут отслеживать регистр букв
— 2–3 бита могут отслеживать размер шрифта
— 2–3 бита могут отслеживать позицию относительно других слов
Это кажется невероятно малым объемом. Тем не менее, этого достаточно, чтобы эффективно ранжировать страницу. Данные уплотняются. Они кодируются. Затем они готовы для индекса.
Решение с использованием хеш-таблицы
У индекса одна задача: скорость. Мгновенный поиск данных. Даже для сложных запросов.
Возможно, вы думаете, что алфавитный порядок работает. Но это не так. В английском языке слов на «M» очень много. Слов на «X» мало. Словарь отражает это. Буква M «толстая». Буква X «тонкая». Поиск по «M» занимает больше времени, чем поиск по «X» в плохо оптимизированной системе из-за дисбаланса распределения.
Хеширование исправляет это.
Хеширование применяет формулу к каждому слову. Оно преобразует слово в числовое значение. Это значение равномерно распределяет записи по фиксированному количеству корзин (bucket). Оно игнорирует алфавит. Оно игнорирует лингвистическую частоту. Оно создает искусственную равномерность.
Хеш-таблица хранит числовой ключ и указатель на фактические данные. Сами данные могут храниться наиболее эффективным способом. Указатель связывает быстрый поиск с тяжелым хранением.
Это разделение является ключевым. Вы не сканируете всю базу данных. Вы вычисляете хеш, переходите прямо к нужной корзине и извлекаете указатель. Это прямолинейно. Это быстро. Это выдерживает нагрузку.
Почему это важно для вас
В следующий раз, когда вы введете запрос и получите результаты за миллисекунды, вспомните о хеш-таблице. Вспомните о взвешивании. Вспомните о сжатии. Интернет хаотичен. Он беспорядочен. Но индекс укрощает его. Он превращает шум в порядок.
Пауки продолжают ползать. Индекс продолжает расти. А алгоритмы продолжают настраиваться. Потому что если они остановятся, вы это заметите.






























