Os dados de teste são do conjunto de dados ClueWeb09B, cuja amostra é armazenada no diretório ./test_data
para fins de teste. Ao iniciar a construção do índice, o programa lê o índice forward compactado, descompacta-o e gera lançamento posicional. O lançamento posicional é contado para gerar lançamento não posicional.
Os lançamentos posicionais e não posicionais são armazenados em dois vetores STL separadamente. Quando o vetor atinge um determinado tamanho, por exemplo 500, ambos os vetores são compactados e esvaziados. Dois arquivos são criados no disco no diretório disk_index
para armazenar a matriz binária compactada. Este processo é repetido até que restem menos de 500 postagens. As postagens restantes são armazenadas na memória como índice dinâmico.
A partir de agora, apenas uma forma de método de codificação é implementada. Quando o método é igual a 1, as postagens são compactadas usando codificação de bytes variáveis. A regra de byte variável usada no meu índice é a seguinte:
O nome de cada arquivo contém duas partes, um prefixo e um número. Os índices posicionais são armazenados no arquivo "Z0", "Z1", ... "Zn", "I0", "I1", ... "In". Após a compactação, o indexador verifica se “Z0” existe no disco. Se "Z0" não sair, "Z0" será criado e gravará o índice em "Z0". Se "Z0" existir, o índice será gravado em "I0". Para índice não posicional, "X0" é verificado e gravado se não existir. Caso contrário, o índice não posicional será gravado em "L0". O termo ID é armazenado nos metadados do arquivo correspondente. Os metadados do termo armazenam o nome do arquivo e as posições inicial e final.
Dois arquivos com o mesmo número de índice nunca poderão coexistir permanentemente no disco. Sempre que 500 postagens terminam de ser gravadas no disco, o indexador verifica se há dois arquivos com o mesmo número de índice. Se houver, dois arquivos são combinados em um novo arquivo com número de índice aumentado em 1. Esse processo é conhecido como mesclagem logarítmica. Por exemplo, se "Z0" e "I0" existirem, eles serão combinados e gravados em "Z1" ou "I1" se "Z1" já existir no disco. Este processo é repetido até que não haja mais arquivos “I” no disco. Os metadados são atualizados de acordo.
Novas postagens são recebidas e armazenadas em índice dinâmico. Os lançamentos gerados pelo analisador de documentos são chamados de lançamentos externos e os lançamentos a serem armazenados na memória são chamados de lançamentos internos. Quando há 500 postagens na memória, ela é compactada usando o mesmo método da construção do índice.
indexer.cpp
que precisam ser corrigidos e duas funções podem ser otimizadas no mesmo arquivo ./initialize.sh
para criar o diretório onde o índice do disco está armazenado e certifique-se de que o diretório esteja vazio, make
makefile ./INDEX
inicia a construção do índice