1 poin oleh GN⁺ 2024-05-28 | 1 komentar | Bagikan ke WhatsApp

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

 
GN⁺ 2024-05-28
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_tsvector milik 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.