Eine schnelle Full-Text-Suchmaschinenbibliothek, geschrieben in Rust
Einführung
- Tantivy ist eine Suchmaschinenbibliothek, deren Design sich stark an Apache Lucene orientiert.
- Es gibt auch eine verteilte Suchmaschine namens Quickwit, die als Alternative zu Elasticsearch oder Apache Solr eingesetzt werden kann.
- Tantivy ist kein Suchmaschinenserver, sondern ein Crate, mit dem sich Suchmaschinen aufbauen lassen.
Benchmarks
- Bietet Performance-Benchmarks für verschiedene Query- und Collection-Typen.
- Die Leistung kann je nach Charakter der Query und Last variieren.
Hauptfunktionen
- Full-Text-Suche: Unterstützung von Tokenizern für verschiedene Sprachen.
- Hohe Geschwindigkeit: Schnelle Startzeiten und Unterstützung für Multithread-Indexierung.
- BM25-Scoring: Dasselbe Scoring-Verfahren wie in Lucene.
- Natural-Language-Queries: Auch komplexe Queries können natürlich verarbeitet werden.
- Range-Queries und hierarchische Facet-Felder: Unterstützung für verschiedene Datentypen.
- Komprimierter Dokumentspeicher: Unterstützung für verschiedene Kompressionsverfahren wie LZ4 und Zstd.
- JSON-Felder und Aggregation Collector: Unterstützung für Histogramme, Range-Buckets sowie Durchschnitts- und Statistikmetriken.
Nicht enthaltene Funktionen
- Verteilte Suche liegt außerhalb des Umfangs von Tantivy. Wenn verteilte Suche benötigt wird, sollte Quickwit verwendet werden.
Erste Schritte
- Tantivy läuft auf stabilem Rust und unterstützt Linux, macOS und Windows.
- tantivy-cli: Bietet eine Kommandozeilenschnittstelle, mit der sich Suchmaschinen einfach erstellen sowie Indexierung und Suche ausführen lassen.
- Referenzdokumentation: Referenzdokumentation für die neueste Release-Version verfügbar.
Wie man das Projekt unterstützen kann
- Tantivy verwenden und Erfahrungen teilen.
- Bug-Reports einreichen.
- Blogposts schreiben.
- Bei der Dokumentation helfen.
- Code beitragen.
Code-Beiträge
- Verwendet den GitHub-Pull-Request-Workflow.
- Beim Beitragen auf GitHub-Tickets verweisen und aussagekräftige Commit-Messages schreiben.
FAQ
- Unterstützung für andere Sprachen: Bietet Bindings für verschiedene Sprachen wie Python und Ruby.
- Beispiele für den Einsatz: Wird in verschiedenen Projekten wie seshat, tantiny und lnx verwendet.
- Geschwindigkeitsvergleich: Etwa 2-mal schneller als Lucene.
- Unterstützung für inkrementelle Indexierung: Ja.
- Dokumentbearbeitung: Dokumente sind unveränderlich. Löschen und erneute Indexierung sind erforderlich.
- Ab wann Suche während der Indexierung möglich ist: Nach dem Aufruf von
commit ist die Suche möglich.
Meinung von GN⁺
- Schnelle Performance auf Rust-Basis: Eine schnelle Suchmaschine, die Performance und Sicherheit von Rust nutzt und sich für Projekte eignet, bei denen Leistung wichtig ist.
- Unterstützung für viele Sprachen: Durch Bindings für Python, Ruby und andere Sprachen in vielen Umgebungen einsetzbar.
- Inkrementelle Indexierung: Eine nützliche Funktion bei der Verarbeitung großer Datenmengen.
- Unveränderlichkeit von Dokumenten: Sorgt für Datenkonsistenz, erfordert bei Änderungen an Dokumenten jedoch eine erneute Indexierung.
- Zusammenspiel mit Quickwit: Wenn verteilte Suche benötigt wird, lässt sich Quickwit sinnvoll ergänzend einsetzen.
1 Kommentare
Hacker-News-Kommentare
Geteilte Projekterfahrung: Diese Bibliothek wurde genutzt, um <a href="https://progscrape.com" rel="nofollow">progscrape.com</a> neu aufzubauen und damit eine alte Python2-AppEngine-Codebasis zu ersetzen. Die Bibliothek ist sehr schnell und konnte auf einem Raspberry Pi 1M Stories in wenigen Sekunden indexieren. Die CPU-Auslastung war sehr niedrig, und auch die Suchleistung war hervorragend.
ParadeDB und Tantivy: Tantivy wurde kürzlich in ParadeDB entdeckt, einer Postgres-Erweiterung. Es wird verwendet, um Postgres für hochperformante Analysen zu erweitern.
Quickwit und Clickhouse: In einem mehrsprachigen Suchprojekt war die kombinierte Leistung von Quickwit und Clickhouse sehr gut. Besonders nützlich war das für die Suche auf Chinesisch, Japanisch und Koreanisch.
Grenzen von
to_tsvector: Dasto_tsvectorvon PostgreSQL passte für bestimmte Anwendungsfälle nicht gut. Tantivy wird viel Erfolg gewünscht.Quickwit-Deployment in Produktionsumgebungen: Mit Quickwit wurden Dutzende Milliarden Objekte indexiert, und die Indexierungsgeschwindigkeit sowie die Query-Latenz sind konkurrenzfähig. Die Trennung von Compute und Storage war sehr nützlich.
Leistung von Tantivy: Die Performance von Tantivy und die Arbeit der Gründer haben beeindruckt. Vom Erfolg des Teams ist man überzeugt.
Trigramm-Suche bei Etsy/Hound: Es gibt Erfahrung mit einem Trigramm-Suchindex in Go, der auf Russ Cox’ Regex-Matching basiert.
Warum Tantivy gewählt wurde: Wegen der enttäuschenden Ressourcenverschwendung von Elasticsearch fiel die Wahl auf Tantivy. Das Projekt sollte in Rust umgesetzt werden, und Tantivy überzeugte durch Performance und Dokumentation.
Upgrade-Probleme bei Lucene und Solr: Lucene und Solr unterstützen Index-Upgrades nur unzureichend. In vielen großen Projekten ist Reindexierung sehr teuer und manchmal unmöglich.
Grenzen beim Hinzufügen/Entfernen von Feldern: In Tantivy können keine Felder hinzugefügt oder entfernt werden; stattdessen müssen alle Daten in einen anderen Suchindex reindexiert werden.
Alternative zu Meilisearch: Wegen der Telemetrie-Probleme von Meilisearch wurde Tantivy als Alternative gefunden. Die Einrichtung wirkt einfach.
LanceDb und Tantivy: Das Vektor-Datenbankprodukt LanceDb nutzt Tantivy für Full-Text-Suche. Derzeit ist das nur über Python-Bindings möglich, aber Rust-Bindings sollen implementiert werden.