Як пошукові системи формують свій індекс: швидкість, вага та хешування

1

Павуки не зупиняються. Вони повзають. Вони знаходять нові сторінки, оновлюють старі і ніколи не завершують свою роботу. Інтернет змінюється дуже швидко, щоб можна було говорити про повне охоплення. Але щойно дані зібрані, починається справжня робота. Системі слід їх зберегти. Потрібно зробити їх доступними для пошуку.

Це не просто вивантаження тексту до папки. Тут важливими є дві речі. По-перше, які дані ви зберігаєте? По-друге, як ви їх організуєте?

Чому просте зберігання не працює

Уявіть пошукову систему, яка запам’ятовує лише слово та URL, де воно зустрілося. Це марно. Ви отримаєте однаковий результат для слова “bank” на фінансовому сайті та для слова “bank” на сторінці туристичного сайту про річку. Жодного контексту. Жодного ранжирування.

Справжній системі потрібно більше. Вона відстежує частоту. Вона вважає, як часто трапляється термін. Вона враховує позицію. Слова в заголовку важливіші за слова в підвалі. Важливі слова у засланнях. Важливі слова у мета-тегах. Кожен фактор отримує свою вагу.

Ця система зважування є пропрієтарною. Google використовує одну формулу. Bing – іншу. Саме тому той самий запит дає різні результати на різних платформах. Немає єдиного «правильного» порядку результатів. Є лише різні алгоритми, які надають пріоритет різним сигналам.

Щільна упаковка даних

Місце для зберігання коштує грошей. Інженери стискають дані. В оригінальному технічному документі Google описується використання всього двох байт (16 біт) для зберігання складних метаданих для одного входження слова.

У цих 16 бітах:
– 2-3 біти можуть відстежувати регістр літер
– 2-3 біти можуть відстежувати розмір шрифту
– 2–3 біти можуть відстежувати позицію щодо інших слів

Це здається неймовірно малим обсягом. Проте цього достатньо, щоб ефективно ранжувати сторінку. Дані ущільнюються. Вони кодуються. Потім вони готові до індексу.

Рішення з використанням хеш-таблиці

Індекс має одне завдання: швидкість. Миттєвий пошук даних. Навіть для складних запитів.

Можливо, ви вважаєте, що алфавітний порядок працює. Але це негаразд. В англійській мові слів «M» дуже багато. Слів на X мало. Словник відбиває це. Літера M «товста». Літера X “тонка”. Пошук «M» займає більше часу, ніж пошук «X» у погано оптимізованій системі через дисбаланс розподілу.

Хешування виправляє це.

Хешування застосовує формулу до кожного слова. Воно перетворює слово на числове значення. Це значення рівномірно розподіляє записи за фіксованою кількістю корзин (bucket). Воно ігнорує абетку. Воно ігнорує лінгвістичну частоту. Воно створює штучну рівномірність.

Хеш-таблиця зберігає числовий ключ та покажчик на фактичні дані. Самі дані можуть зберігатися найефективнішим способом. Покажчик пов’язує швидкий пошук із важким зберіганням.

Цей поділ є ключовим. Ви не скануєте всю базу даних. Ви обчислюєте хеш, переходите прямо до потрібного кошика та витягуєте покажчик. Це прямолінійно. Це швидко. Це витримує навантаження.

Чому це важливо для вас

Наступного разу, коли ви введете запит і отримаєте результати за мілісекунди, згадайте про хеш-таблицю. Згадайте про зважування. Згадайте про стиск. Інтернет хаотичний. Він безладний. Але індекс приборкує його. Він перетворює шум у порядок.

Павуки продовжують повзати. Індекс продовжує зростати. А алгоритми продовжують налаштовуватись. Тому що, якщо вони зупиняться, ви це помітите.