Biblioteca rápida de motor de búsqueda de texto completo escrita en Rust
Introducción
- Tantivy es una biblioteca de motor de búsqueda fuertemente inspirada en el diseño de Apache Lucene.
- También existe Quickwit, un motor de búsqueda distribuido que puede usarse como alternativa a Elasticsearch o Apache Solr.
- Tantivy no es un servidor de búsqueda, sino un crate para construir motores de búsqueda.
Benchmarks
- Ofrece benchmarks de rendimiento para varios tipos de consultas y colecciones.
- El rendimiento puede variar según la naturaleza de la consulta y la carga.
Funciones principales
- Búsqueda de texto completo: soporte de tokenizers para varios idiomas.
- Rendimiento rápido: arranque rápido y soporte para indexación multihilo.
- Puntuación BM25: el mismo método de puntuación que Lucene.
- Consultas en lenguaje natural: puede manejar de forma natural incluso consultas complejas.
- Consultas por rango y campos de facetas jerárquicas: soporte para varios tipos de datos.
- Almacenamiento comprimido de documentos: soporte para varios métodos de compresión, como LZ4 y Zstd.
- Campos JSON y recolectores de agregación: soporte para histogramas, buckets de rango, promedio y métricas estadísticas.
Lo que no hace
- La búsqueda distribuida está fuera del alcance de Tantivy. Si necesitas búsqueda distribuida, consulta Quickwit.
Primeros pasos
- Tantivy funciona con Rust estable y es compatible con Linux, macOS y Windows.
- tantivy-cli: ofrece una interfaz de línea de comandos para crear fácilmente un motor de búsqueda, indexar y buscar.
- Documentación de referencia: ofrece documentación de referencia para la versión de lanzamiento más reciente.
Cómo apoyar el proyecto
- Usar Tantivy y compartir tu experiencia.
- Enviar reportes de errores.
- Escribir publicaciones de blog.
- Ayudar con la documentación.
- Contribuir con código.
Contribución de código
- Usa el flujo de trabajo de Pull Request de GitHub.
- Al contribuir, haz referencia a tickets de GitHub y escribe mensajes de commit completos.
FAQ
- Soporte para otros lenguajes: ofrece bindings para varios lenguajes, como Python y Ruby.
- Ejemplos de uso: se usa en varios proyectos, como seshat, tantiny y lnx.
- Comparación de velocidad: es aproximadamente 2 veces más rápido que Lucene.
- Soporte para indexación incremental: sí.
- Edición de documentos: los documentos son inmutables. Es necesario eliminarlos y reindexarlos.
- Cuándo se puede buscar durante la indexación: se puede buscar después de llamar a
commit.
Opinión de GN⁺
- Rendimiento rápido basado en Rust: como motor de búsqueda rápido que aprovecha el rendimiento y la seguridad de Rust, es adecuado para proyectos donde el rendimiento es importante.
- Soporte para varios lenguajes: puede usarse en distintos entornos mediante bindings para varios lenguajes, como Python y Ruby.
- Indexación incremental: una función útil para procesar grandes volúmenes de datos.
- Inmutabilidad de documentos: mantiene la consistencia de los datos, pero requiere reindexación al modificar documentos.
- Integración con Quickwit: si se necesita búsqueda distribuida, conviene usarlo junto con Quickwit.
1 comentarios
Opiniones de Hacker News
Experiencia compartiendo un proyecto: Rehicieron <a href="https://progscrape.com" rel="nofollow">progscrape.com</a> con esta biblioteca para reemplazar una base de código antigua de Python2 en AppEngine. La biblioteca es muy rápida y pudo indexar 1M de historias en una Raspberry Pi en pocos segundos. El uso de CPU es muy bajo y el rendimiento de búsqueda también es excelente.
ParadeDB y Tantivy: Recientemente descubrieron Tantivy en ParadeDB (una extensión de Postgres). Se usa para ampliar Postgres con análisis de alto rendimiento.
Quickwit y Clickhouse: En un proyecto de búsqueda multilingüe, el rendimiento combinado de Quickwit y Clickhouse fue muy bueno. Fue especialmente útil para búsquedas en chino, japonés y coreano.
Limitaciones de to_tsvector: El
to_tsvectorde PostgreSQL no se ajustaba bien a ciertos casos de uso. Le desean éxito a Tantivy.Despliegue de Quickwit en producción: Usaron Quickwit para indexar decenas de miles de millones de objetos, y la velocidad de indexación y la latencia de consulta son competitivas. La separación entre cómputo y almacenamiento fue muy útil.
Rendimiento de Tantivy: Les impresionó el rendimiento de Tantivy y el esfuerzo de sus fundadores. Confían en que el equipo tendrá éxito.
Búsqueda por trigramas de Etsy/Hound: Tuvieron experiencia usando un índice de búsqueda por trigramas en Go, basado en el emparejamiento de expresiones regulares de Russ Cox.
Por qué eligieron Tantivy: Eligieron Tantivy después de decepcionarse con el consumo de recursos de Elasticsearch. Querían avanzar el proyecto en Rust, y el rendimiento y la documentación de Tantivy eran excelentes.
Problemas de actualización en Lucene y Solr: Lucene y Solr ofrecen poco soporte para actualizar índices. En muchos proyectos grandes, reindexar es muy costoso y a veces imposible.
Limitaciones para agregar o quitar campos: En Tantivy no se pueden agregar ni eliminar campos; todos los datos deben reindexarse en otro índice de búsqueda.
Alternativa a Meilisearch: Encontraron Tantivy como alternativa por los problemas de telemetría de Meilisearch. La configuración parece sencilla.
LanceDb y Tantivy: Un producto de base de datos vectorial llamado LanceDb usa Tantivy para ofrecer búsqueda de texto completo. Por ahora solo es posible mediante bindings de Python, pero quieren implementar bindings para Rust.