Ein (Spielzeug) Low-Level-Dokumentindefinierungs- und Abrufsystem
IndexerMCIndexface ist ein winziges traditionelles Dokumentindexierungs- und Abrufsystem, das ich als Ausrede für das Spielen mit FSTS (unter Verwendung der BurntSushi/fst -Kiste) und Rost -Parallelisierungsfunktionen (unter Verwendung der crossbeam -Kiste für die Übergabe von Nachrichten) geschrieben habe.
Merkmale:
- Voll in Rost geschrieben
- Verwendet FSTS für einen schnellen Zugriff auf Postings
- Ermöglicht Felddokumente und verwendet das
BM25F -Abrufmodell (Hinweis: Ich habe seine Richtigkeit nicht überprüft) - Die Indizierungsstufe wird mit einem Threadpool durch Erstellen und Zusammenführen unabhängiger Indexes paralellisiert
- (Beachten Sie, dass dies eine naive Implementierung ist, und obwohl es extrem schnell ist, kann es wirklich erinnerungshungrig sein.)
- Die Abrufstufe ist parallel zu einem Threadpool, in dem in diesem Fall eine andere Suche nach jedem Token durchgeführt wird
Warnungen:
- Dies ist ein Spielzeugprojekt (z. B. Indexdateien sind nicht komprimiert, die Parallelisierungstechniken sind naiv und ressourcenhungry ...) und die API ist sehr einfach.
Verwendung:
- Einfach
cargo run --release . main.rs erstellt eine Dummy -Sammlung von 1000 Dateien mit der Kiste MitchellRhysHall/random_word und wird dann eine randomisierte Abfrage mit moderatgröße indexieren und durchführen.
Mögliche Verbesserungen:
- Die Verwendung von FSTS eröffnet viele Möglichkeiten, da Regex-ähnliche Suchvorgänge leicht durchgeführt werden können.
- Bessere Parallelisierungstechniken: Im Moment erstellt jeder Thread seinen eigenen In-Memory-Index, der später an binäre Dateien verbunden und geschrieben wird. Dies bedeutet, dass die Speicherverwendung für größere Dokumentensammlungen sehr hoch sein kann.
- Bessere Tokenizer.
- N-Gramm oder ähnlich, aufwändigere Indizes.
- Alternative Abrufmodelle, Ausdrucksabfragen usw.