1 Punkte von GN⁺ 2024-05-28 | 1 Kommentare | Auf WhatsApp teilen

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

 
GN⁺ 2024-05-28
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: Das to_tsvector von 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.