Como os mecanismos de pesquisa constroem seu índice: velocidade, peso e hash

10

As aranhas não param. Eles rastejam. Eles encontram novas páginas, atualizam as antigas e nunca terminam o trabalho. A web muda rápido demais para ser concluída. Mas uma vez obtidos os dados, o verdadeiro trabalho começa. O motor tem que armazená-lo. Tem que torná-lo pesquisável.

Isto não é apenas despejar texto em uma pasta. Duas coisas importam aqui. Primeiro, quais dados você mantém? Em segundo lugar, como você organiza isso?

Por que o armazenamento simples falha

Imagine um mecanismo de busca que lembra apenas uma palavra e a URL onde ela apareceu. Inútil. Você obteria o mesmo resultado para “banco” em um site financeiro e “banco” em uma página de turismo à beira de um rio. Sem contexto. Sem classificação.

Um motor real precisa de mais. Ele rastreia a frequência. Conta quantas vezes um termo aparece. Olha para a posição. As palavras no título são mais importantes do que as palavras no rodapé. Palavras em links são importantes. Palavras em meta tags são importantes. Cada fator recebe um peso.

Essa ponderação é proprietária. O Google usa uma fórmula. O Bing usa outro. É por isso que a mesma consulta produz resultados diferentes em plataformas diferentes. Não existe uma ordem única “correta” de resultados. Existem apenas algoritmos diferentes que priorizam sinais diferentes.

Embalagem de dados precisa

O espaço de armazenamento custa dinheiro. Os engenheiros compactam os dados. O whitepaper original do Google descreve o uso de apenas dois bytes (16 bits) para armazenar metadados complexos para uma única palavra.

Nesses 16 bits:
– 2 a 3 bits podem rastrear a capitalização
– 2 a 3 bits podem rastrear o tamanho da fonte
– 2 a 3 bits podem rastrear a posição relativa a outras palavras

Parece impossivelmente pequeno. No entanto, contém informações suficientes para classificar uma página de forma eficaz. Os dados são compactados. Está codificado. Então está pronto para o índice.

A solução da tabela hash

Um índice tem uma função: velocidade. Encontrar dados instantaneamente. Mesmo para consultas complexas.

Você pode pensar que a ordem alfabética funciona. Isso não acontece. Em inglês, as palavras “M” estão por toda parte. Palavras “X” são raras. Um dicionário reflete isso. M é grosso. X é magro. A busca por “M” leva mais tempo do que a busca por “X” em um sistema mal otimizado devido ao desequilíbrio de distribuição.

Hashing corrige isso.

Hashing aplica uma fórmula a cada palavra. Ele converte a palavra em um valor numérico. Esse valor distribui as entradas uniformemente em um número fixo de buckets. Ele ignora o alfabeto. Ele ignora a frequência linguística. Cria uniformidade artificial.

A tabela hash contém a chave numérica e um ponteiro para os dados reais. Os próprios dados podem ser armazenados da maneira mais eficiente possível. O ponteiro preenche a lacuna entre a pesquisa rápida e o armazenamento pesado.

Essa separação é fundamental. Você não verifica todo o banco de dados. Você calcula o hash, vai direto ao balde e puxa o ponteiro. É direto. É rápido. Ele lida com a carga.

Por que isso é importante para você

Da próxima vez que você digitar uma consulta e obter resultados em milissegundos, lembre-se da tabela hash. Lembre-se da ponderação. Lembre-se da compressão. A web está confusa. É caótico. Mas o índice o domestica. Transforma o ruído em ordem.

As aranhas continuam rastejando. O índice continua crescendo. E os algoritmos continuam aprimorando. Porque se eles pararem, você percebe.