1 points par GN⁺ 2024-05-28 | 1 commentaires | Partager sur WhatsApp

Une bibliothèque de moteur de recherche full-text rapide écrite en Rust

Présentation

  • Tantivy est une bibliothèque de moteur de recherche dont la conception s’inspire fortement d’Apache Lucene.
  • Il existe aussi Quickwit, un moteur de recherche distribué pouvant servir d’alternative à Elasticsearch ou Apache Solr.
  • Tantivy n’est pas un serveur de moteur de recherche, mais un crate permettant de construire un moteur de recherche.

Benchmarks

  • Des benchmarks de performance sont fournis pour différents types de requêtes et de collections.
  • Les performances peuvent varier selon la nature des requêtes et la charge.

Fonctionnalités principales

  • Recherche full-text : prise en charge de tokenizers pour diverses langues.
  • Performances élevées : démarrage rapide et prise en charge de l’indexation multithread.
  • Scoring BM25 : même méthode de scoring que Lucene.
  • Requêtes en langage naturel : capable de traiter naturellement des requêtes complexes.
  • Requêtes par intervalle et champs de facettes hiérarchiques : prise en charge de différents types de données.
  • Stockage de documents compressé : prise en charge de plusieurs méthodes de compression comme LZ4 et Zstd.
  • Champs JSON et collecteurs d’agrégation : prise en charge des histogrammes, buckets par plage, moyennes et métriques statistiques.

Hors périmètre

  • La recherche distribuée ne fait pas partie du périmètre de Tantivy. Si vous avez besoin de recherche distribuée, référez-vous à Quickwit.

Pour démarrer

  • Tantivy fonctionne avec Rust stable et prend en charge Linux, macOS et Windows.
  • tantivy-cli : fournit une interface en ligne de commande pour créer facilement un moteur de recherche, indexer et effectuer des recherches.
  • Documentation de référence : documentation disponible pour la dernière version publiée.

Comment soutenir le projet

  • Utiliser Tantivy et partager votre expérience.
  • Soumettre des rapports de bug.
  • Écrire des articles de blog.
  • Aider à la documentation.
  • Contribuer au code.

Contribution au code

  • Utilisation du workflow GitHub Pull Request.
  • Lors d’une contribution, référencer le ticket GitHub et rédiger des messages de commit détaillés.

FAQ

  • Prise en charge d’autres langages : fournit des bindings pour Python, Ruby et d’autres langages.
  • Exemples d’utilisation : utilisé dans divers projets comme seshat, tantiny, lnx, etc.
  • Comparaison de vitesse : environ 2 fois plus rapide que Lucene.
  • Prise en charge de l’indexation incrémentale : oui.
  • Modification des documents : les documents sont immuables. Il faut supprimer puis réindexer.
  • Moment où la recherche devient possible pendant l’indexation : après l’appel à commit.

L’avis de GN⁺

  • Des performances rapides grâce à Rust : un moteur de recherche rapide tirant parti des performances et de la sûreté de Rust, adapté aux projets où la performance est critique.
  • Prise en charge de nombreux langages : utilisable dans divers environnements grâce à des bindings pour Python, Ruby, etc.
  • Indexation incrémentale : une fonctionnalité utile pour le traitement de grands volumes de données.
  • Immutabilité des documents : garantit la cohérence des données, mais nécessite une réindexation lors de la modification d’un document.
  • Association avec Quickwit : si vous avez besoin de recherche distribuée, il peut être pertinent de l’utiliser avec Quickwit.

1 commentaires

 
GN⁺ 2024-05-28
Avis Hacker News
  • Partage d’expérience sur le projet : cette bibliothèque a été utilisée pour reconstruire <a href="https://progscrape.com" rel="nofollow">progscrape.com</a> afin de remplacer une ancienne base de code Python2 sur AppEngine. La bibliothèque est extrêmement rapide et a permis d’indexer 1M d’histoires en quelques secondes sur un Raspberry Pi. L’utilisation CPU était très faible et les performances de recherche excellentes.

  • ParadeDB et Tantivy : Tantivy a récemment été découvert via ParadeDB (extension Postgres). Il est utilisé pour étendre Postgres afin d’offrir des analyses hautes performances.

  • Quickwit et Clickhouse : dans un projet de recherche multilingue, les performances combinées de Quickwit et Clickhouse étaient très bonnes. C’était particulièrement utile pour la recherche en chinois, japonais et coréen.

  • Limites de to_tsvector : le to_tsvector de PostgreSQL ne convenait pas bien à certains cas d’usage. Souhait de réussite à Tantivy.

  • Déploiement de Quickwit en production : des dizaines de milliards d’objets ont été indexés avec Quickwit, avec une vitesse d’indexation et une latence des requêtes compétitives. La séparation du calcul et du stockage a été très utile.

  • Performances de Tantivy : les performances de Tantivy et les efforts de ses fondateurs ont impressionné. Grande confiance dans la réussite de l’équipe.

  • Recherche trigramme chez Etsy/Hound : expérience avec un index de recherche trigramme en Go, basé sur l’appariement d’expressions régulières de Russ Cox.

  • Pourquoi choisir Tantivy : Tantivy a été choisi après la déception causée par la consommation de ressources d’Elasticsearch. Il y avait aussi la volonté de mener le projet en Rust, et les performances comme la documentation de Tantivy étaient excellentes.

  • Problèmes de mise à niveau avec Lucene et Solr : le support de mise à niveau des index dans Lucene et Solr est insuffisant. Dans de nombreux grands projets, la réindexation est très coûteuse, voire parfois impossible.

  • Limites sur l’ajout/la suppression de champs : dans Tantivy, il n’est pas possible d’ajouter ou de supprimer des champs, et il faut réindexer toutes les données dans un autre index de recherche.

  • Alternative à Meilisearch : Tantivy a été recherché comme alternative à Meilisearch à cause des problèmes de télémétrie de ce dernier. La configuration semble simple.

  • LanceDb et Tantivy : Tantivy est utilisé dans le produit de base de données vectorielle LanceDb pour fournir la recherche plein texte. Pour l’instant, cela n’est possible que via les bindings Python, mais des bindings Rust sont en cours d’implémentation.