Les données de test proviennent de l'ensemble de données ClueWeb09B, dont l'échantillon est stocké dans le répertoire ./test_data
à des fins de test. Lorsque vous commencez à créer l'index, le programme lit l'index direct compressé, le décompresse et génère une publication de position. La publication positionnelle est comptabilisée pour générer la publication non positionnelle.
Les publications positionnelles et non positionnelles sont stockées séparément dans deux vecteurs STL. Lorsque le vecteur atteint une certaine taille, par exemple 500, les deux vecteurs sont compressés et vidés. Deux fichiers sont créés sur le disque sous le répertoire disk_index
pour stocker le tableau binaire compressé. Ce processus est répété jusqu'à ce qu'il reste moins de 500 publications. Les publications restantes sont stockées en mémoire sous forme d'index dynamique.
Pour l’instant, une seule forme de méthode de codage est implémentée. Lorsque la méthode est égale à 1, les publications sont compressées à l'aide d'un codage d'octets variable. La règle d'octet variable utilisée dans mon index est la suivante :
Le nom de chaque fichier contient deux parties, un préfixe et un numéro. Les index de position sont stockés dans le fichier "Z0", "Z1", ... "Zn", "I0", "I1", ... "In". Après compression, l'indexeur vérifie si "Z0" existe sur le disque. Si "Z0" ne se termine pas, "Z0" est créé et écrit l'index dans "Z0". Si "Z0" existe, l'index est écrit dans "I0". Pour un index non positionnel, "X0" est vérifié et écrit s'il n'existe pas. Sinon, l'index non positionnel est écrit dans "L0". Les termes ID sont stockés dans les métadonnées du fichier correspondant. Les métadonnées du terme stockent le nom du fichier ainsi que les positions de début et de fin.
Deux fichiers ayant le même numéro d'index ne peuvent jamais coexister de façon permanente sur le disque. Chaque fois que 500 publications ont fini d'écrire sur le disque, l'indexeur vérifie si deux fichiers ont le même numéro d'index. Si tel est le cas, deux fichiers sont combinés en un nouveau fichier dont le numéro d'index est augmenté de 1. Ce processus est connu sous le nom de fusion logarithmique. Par exemple, si « Z0 » et « I0 » existent, ils sont combinés et écrits dans « Z1 » ou « I1 » si « Z1 » existe déjà sur le disque. Ce processus est répété jusqu'à ce qu'il n'y ait plus de fichiers « I » sur le disque. Les métadonnées sont mises à jour en conséquence.
Les nouvelles publications sont reçues et stockées dans un index dynamique. Les écritures générées par l'analyseur de documents sont appelées écritures externes et les écritures à stocker en mémoire sont appelées écritures internes. Lorsqu'il y a 500 publications en mémoire, elles sont compressées en utilisant la même méthode que celle utilisée pour créer l'index.
indexer.cpp
qui doivent être corrigées et deux fonctions peuvent être optimisées dans le même fichier ./initialize.sh
pour créer le répertoire dans lequel l'index du disque est stocké et assurez-vous que le répertoire est vide, make
makefile ./INDEX
commence à construire l'index