Un (jouet) un système d'indexation de documents de bas niveau et de récupération
INDEXERMCINDEXFACE est un minuscule système d'indexation et de récupération de documents traditionnels que j'ai écrit comme excuse pour jouer avec les FST (en utilisant la caisse BurntSushi/fst ) et les capacités de parallélisation de Rust (en utilisant également la caisse crossbeam pour le passage du message)
Caractéristiques:
- Entièrement écrit en rouille
- Utilise des FST pour un accès rapide aux publications
- Permet des documents alignés et utilise le modèle de récupération
BM25F (Remarque: Je n'ai pas vérifié son exactitude) - L'étape d'indexation est paralellisée avec un threadpool en créant et en fusionnant des index indépendants
- (Notez qu'il s'agit d'une implémentation naïve, et bien qu'elle soit extrêmement rapide, elle peut avoir vraiment faim de mémoire)
- L'étape de récupération est parallélisée avec un threadpool, où dans ce cas, il lance une recherche différente pour chaque jeton
Avertissements:
- Il s'agit d'un projet de jouets (par exemple: les fichiers d'index ne sont pas compressés, les techniques de parallélisation sont naïves et gênantes en ressources ...) et l'API est très basique.
Usage:
- Exécutez simplement
cargo run --release . main.rs créera une collection factice de 1000 fichiers à l'aide de la caisse MitchellRhysHall/random_word , puis indexera et effectuera une requête randomisée de taille modéré.
Améliorations possibles:
- L'utilisation de FSTS ouvre de nombreuses possibilités, car les recherches de type regex peuvent être facilement effectuées.
- De meilleures techniques de parallélisation: À l'heure actuelle, chaque thread créera son propre index en mémoire, qui sera ensuite rejoint et écrit sur des fichiers binaires. Cela signifie que l'utilisation de la mémoire peut être très élevée pour de plus grandes collections de documents.
- Mieux tokenisers.
- N-gram ou des index similaires, plus élaborés.
- Modèles de récupération alternatifs, requêtes de phrase, etc.