Pustaka mesin pencarian full-text cepat yang ditulis dengan Rust
Pengantar
- Tantivy adalah pustaka mesin pencarian yang sangat mengacu pada desain Apache Lucene.
- Ada juga mesin pencarian terdistribusi bernama Quickwit yang dapat digunakan sebagai alternatif untuk Elasticsearch atau Apache Solr.
- Tantivy bukan server mesin pencarian, melainkan crate untuk membangun mesin pencarian.
Benchmark
- Menyediakan benchmark performa untuk berbagai jenis kueri/koleksi.
- Performa dapat berbeda tergantung sifat kueri dan bebannya.
Fitur utama
- Pencarian full-text: Mendukung tokenizer untuk berbagai bahasa.
- Performa cepat: Waktu startup cepat dan mendukung indexing multithread.
- Skoring BM25: Metode skoring yang sama dengan Lucene.
- Kueri bahasa alami: Dapat menangani kueri kompleks secara alami.
- Kueri rentang dan field facet hierarkis: Mendukung berbagai tipe data.
- Penyimpanan dokumen terkompresi: Mendukung berbagai metode kompresi seperti LZ4 dan Zstd.
- Field JSON dan kolektor agregasi: Mendukung histogram, range bucket, rata-rata, dan metrik statistik.
Hal yang tidak didukung
- Pencarian terdistribusi berada di luar cakupan Tantivy. Jika memerlukan pencarian terdistribusi, lihat Quickwit.
Memulai
- Tantivy berjalan di Rust stabil dan mendukung Linux, macOS, serta Windows.
- tantivy-cli: Menyediakan antarmuka baris perintah untuk dengan mudah membuat mesin pencarian serta melakukan indexing dan pencarian.
- Dokumentasi referensi: Menyediakan dokumentasi referensi untuk versi rilis terbaru.
Cara mendukung proyek
- Gunakan Tantivy dan bagikan pengalaman Anda.
- Kirim bug report.
- Tulis posting blog.
- Bantu dokumentasi.
- Berkontribusi pada kode.
Kontribusi kode
- Menggunakan alur kerja GitHub Pull Request.
- Saat berkontribusi, rujuk tiket GitHub dan tulis pesan commit yang komprehensif.
FAQ
- Dukungan bahasa lain: Menyediakan binding untuk berbagai bahasa seperti Python dan Ruby.
- Contoh penggunaan: Digunakan di berbagai proyek seperti seshat, tantiny, dan lnx.
- Perbandingan kecepatan: Sekitar 2x lebih cepat daripada Lucene.
- Dukungan indexing inkremental: Ya.
- Pengeditan dokumen: Dokumen bersifat immutable. Perlu dihapus lalu diindeks ulang.
- Kapan bisa dicari saat indexing berlangsung: Dapat dicari setelah memanggil
commit.
Opini GN⁺
- Performa cepat berbasis Rust: Mesin pencarian cepat yang memanfaatkan performa dan keamanan Rust, cocok untuk proyek yang mengutamakan performa.
- Dukungan untuk berbagai bahasa: Dapat digunakan di beragam lingkungan melalui binding untuk Python, Ruby, dan lainnya.
- Indexing inkremental: Fitur yang berguna saat menangani data berskala besar.
- Immutability dokumen: Menjaga konsistensi data, tetapi memerlukan indexing ulang saat dokumen diubah.
- Integrasi dengan Quickwit: Jika membutuhkan pencarian terdistribusi, Quickwit cocok digunakan bersama.
1 komentar
Opini Hacker News
Berbagi pengalaman proyek: Untuk menggantikan codebase Python2 AppEngine yang lama, pustaka ini digunakan untuk membangun ulang <a href="https://progscrape.com" rel="nofollow">progscrape.com</a>. Pustaka ini sangat cepat, dan mampu mengindeks 1M cerita dalam hitungan detik di Raspberry Pi. Penggunaan CPU sangat rendah, dan performa pencariannya juga sangat baik.
ParadeDB dan Tantivy: Baru-baru ini menemukan Tantivy di ParadeDB (ekstensi Postgres). Ini digunakan untuk memperluas Postgres demi analitik berperforma tinggi.
Quickwit dan Clickhouse: Dalam proyek pencarian multibahasa, performa gabungan Quickwit dan Clickhouse sangat bagus. Terutama berguna untuk pencarian bahasa Mandarin, Jepang, dan Korea.
Keterbatasan to_tsvector:
to_tsvectormilik PostgreSQL tidak terlalu cocok untuk kasus penggunaan tertentu. Semoga Tantivy sukses.Deploy Quickwit di lingkungan produksi: Menggunakan Quickwit untuk mengindeks puluhan miliar objek, dan kecepatan pengindeksan serta latensi kuerinya kompetitif. Pemisahan komputasi dan penyimpanan sangat berguna.
Performa Tantivy: Terkesan dengan performa Tantivy dan upaya para pendirinya. Yakin tim ini akan sukses.
Pencarian trigram Etsy/Hound: Pernah menggunakan indeks pencarian trigram dalam bahasa Go yang didasarkan pada pencocokan regular expression karya Russ Cox.
Alasan memilih Tantivy: Memilih Tantivy karena kecewa dengan konsumsi sumber daya Elasticsearch. Ingin mengerjakan proyek dengan Rust, dan performa serta dokumentasi Tantivy sangat baik.
Masalah upgrade Lucene dan Solr: Dukungan upgrade indeks di Lucene dan Solr kurang memadai. Di banyak proyek besar, reindeks sangat mahal dan kadang mustahil.
Keterbatasan tambah/hapus field: Di Tantivy, field tidak bisa ditambahkan atau dihapus, dan semua data harus diindeks ulang ke indeks pencarian lain.
Alternatif Meilisearch: Mencari Tantivy sebagai alternatif karena masalah telemetri Meilisearch. Konfigurasinya tampak sederhana.
LanceDb dan Tantivy: Produk database vektor bernama LanceDb menggunakan Tantivy untuk menyediakan fitur pencarian teks penuh. Saat ini baru bisa melalui Python binding, tetapi sedang berupaya mengimplementasikan Rust binding.