Sistema de indexação do Drupal

Todo o conteúdo do Drupal é totalmente indexado, tornando-se pesquisável em todas as vezes que utilizar o módulo de busca.

O objetivo do indexador é procurar grandes pedaços de HTML eficientemente. Isso ocorre através do processamento do conteúdo quando o arquivo cron.php é acessado. normalmente esse arquivo cron.php é configurado no cron do sistema para ser executado em tempos e tempos, o tempo será determinado conforme o quantidade de atualização do site, ele somente indexa conteúdos novos ou ainda não indexados.

O indexador analisa os dados e divide o texto em palavras (chamado toquenização), atribuindo a pontuação de cada toquen com base em uma regra definida, que podem ser extendidas através da API de pesquisa. Ele então armazena estes dados na base de dados e, quando for efetuado uma pesquisa ele faz a busca na tabela de indexação e não na tabela do conteúdo diretamente, fazendo com que o sistema de busca tenha um bom desempenho

Os indexadores são utilizados para extrair e organizar metadados de arquivos ou de outras fontes em que o texto não possui um formato padrão. A relevância da pesquisa se refere ao conteúdo passando por regras normalmente complexas que determinam a classificação de um índice.

Um dos maiores benefícios do Drupal é que blog, fórum, páginas e o restante dos seus conteúdos são "nodes", e suas estruturas de base de dados são idênticas, e estas semelhanças significam que compartilham funcionalidades básica. Uma dessas características comuns é que todos os nodes são indexados automaticamente se o módulo de pesquisa estiver habilitado, e nenhuma programação adicional é necessária para isto.

Quando criamos novos tipos de conteúdos personalizados, esses também já são incorporados ao sistema de indexação.

O indexador possui um modo de pré processamento, aonde o texto é filtrado através de um conjunto de regras para atribuir pontuação. Essas regras incluem lidar com siglas, URLs e dados numéricos. Durante a fase pré, outros módulos têm a oportunidade de adicionar lógica para esse processo, permitindo com que estes módulos manipulem a indexação do seu próprio conteúdo. Isso faz com que módulos de tradução possam indexar palavras em idioma Chinês, Japonês e Koreano e outros idiomas, garantindo que o caracter seja corretamente indexado.
Após a fase pré, o indexador utiliza tags HTML para encontrar palavras mais importantes (Chamadas de tokens) e atrubui-lhes uma pontuação ajustada baseada no pontuação padrão e o número de ocorrências para cada token. Estes resultados serão utilizados para determinar a relevância de um token. Para entender melhor como o sitema de indexação funciona, vamos pegar um pedaço de HTML e vamos executá-lo com o indexador. A figura abaixo mostra uma visão geral de como o indexador HTML analisa o conteúdo, atribuindo a pontuação aos tokens, e a armazenagem da informação no banco de dados.

Quando o indexador encontra dados numéricos separados por pontos, os pontos são removidos e os números por si só são indexados. Isto torna elementos, como datas, números de versão, e os endereços IP mais fáceis de serem pesquisados. O mesmo processo ocorre nas palavras, onde as tags HTML são utilizadas para determinar a pontuação que as palavras irão receber. Nesta imagem é possível perceber que o conteúdo cercado da tag possui uma pontuação maior que as palavras anteriores. A fórmula para determinar a pontuação dos tokens de um modo geral é a seguinte:

Número de ocorrências x Peso da tag HTML

É possível indexar conteúdo de nodes e até mesmo conteúdos que não são nodes, para que um módulo possa interagir no sistema de indexação ele precisa utilizar os hooks nodeapi('update index') para indexar conteúdos de node e o hook_update_index() para que seja possível indexar conteúdo que não estejam em formato de node.