Los datos de prueba provienen del conjunto de datos ClueWeb09B, cuya muestra se almacena en el directorio ./test_data
para fines de prueba. Cuando comienza a construir el índice, el programa lee el índice directo comprimido, lo descomprime y genera una publicación posicional. La publicación posicional se cuenta para generar publicaciones no posicionales.
Las publicaciones posicionales y no posicionales se almacenan en dos vectores STL por separado. Cuando el vector alcanza un cierto tamaño, por ejemplo 500, ambos vectores se comprimen y se vacían. Se crean dos archivos en el disco bajo el directorio disk_index
para almacenar la matriz binaria comprimida. Este proceso se repite hasta que queden menos de 500 publicaciones. Las publicaciones sobrantes se almacenan en la memoria como índice dinámico.
Por ahora, sólo se implementa una forma de método de codificación. Cuando el método es igual a 1, las publicaciones se comprimen utilizando codificación de bytes variable. La regla de bytes variables utilizada en mi índice es la siguiente:
El nombre de cada archivo contiene dos partes, un prefijo y un número. Los índices posicionales se almacenan en el archivo "Z0", "Z1", ... "Zn", "I0", "I1", ... "In". Después de comprimir, el indexador comprueba si existe "Z0" en el disco. Si "Z0" no sale, se crea "Z0" y se escribe el índice en "Z0". Si existe "Z0", el índice se escribe en "I0". Para el índice no posicional, se marca "X0" y se escribe en él si no existe. De lo contrario, el índice no posicional se escribe en "L0". El término ID se almacena en los metadatos del archivo correspondiente. Los metadatos del término almacenan el nombre del archivo y la posición inicial y final.
Dos archivos que tengan el mismo número de índice nunca pueden coexistir en el disco de forma permanente. Cada vez que se terminan de escribir 500 publicaciones en el disco, el indexador comprueba si hay dos archivos que tengan el mismo número de índice. Si los hay, dos archivos se combinan en un nuevo archivo con el número de índice aumentado en 1. Este proceso se conoce como fusión logarítmica. Por ejemplo, si existen "Z0" e "I0", se combinan y se escriben en "Z1", o en "I1" si "Z1" ya existe en el disco. Este proceso se repite hasta que no haya archivos "I" en el disco. Los metadatos se actualizan en consecuencia.
Las nuevas publicaciones se reciben y almacenan en un índice dinámico. Las publicaciones generadas por el analizador de documentos se denominan publicaciones externas y las publicaciones que se almacenarán en la memoria se denominan publicaciones internas. Cuando hay 500 publicaciones en la memoria, se comprime utilizando el mismo método que para crear el índice.
indexer.cpp
que deben corregirse y dos funciones se pueden optimizar en el mismo archivo ./initialize.sh
para crear el directorio donde se almacena el índice del disco y asegúrese de que el directorio esté vacío. make
llamadas makefile ./INDEX
comienza a crear el índice.