Rust ile yazılmış hızlı bir tam metin arama motoru kütüphanesi
Giriş
- Tantivy, tasarımında Apache Lucene'den güçlü biçimde esinlenen bir arama motoru kütüphanesidir.
- Elasticsearch veya Apache Solr'a alternatif olarak kullanılabilecek Quickwit adlı dağıtık bir arama motoru da vardır.
- Tantivy, bir arama motoru sunucusu değil, arama motoru oluşturmak için kullanılabilen bir crate'tir.
Benchmark
- Farklı sorgu/koleksiyon türleri için performans benchmark'ları sunar.
- Performans, sorgunun niteliğine ve yüke göre değişebilir.
Başlıca özellikler
- Tam metin arama: Çeşitli diller için tokenizer desteği.
- Yüksek performans: Hızlı başlangıç süresi ve çok iş parçacıklı indeksleme desteği.
- BM25 skorlaması: Lucene ile aynı skorlama yöntemi.
- Doğal dil sorguları: Karmaşık sorguları da doğal biçimde işleyebilir.
- Aralık sorguları ve hiyerarşik facet alanları: Çeşitli veri türlerini destekler.
- Sıkıştırılmış belge deposu: LZ4, Zstd gibi çeşitli sıkıştırma yöntemlerini destekler.
- JSON alanları ve aggregation collector'lar: Histogram, aralık bucket'ları, ortalama ve istatistik metriklerini destekler.
Kapsam dışı olanlar
- Dağıtık arama, Tantivy'nin kapsamı dışındadır. Dağıtık aramaya ihtiyacınız varsa Quickwit'e bakın.
Başlarken
- Tantivy, kararlı Rust üzerinde çalışır ve Linux, macOS, Windows'u destekler.
- tantivy-cli: Arama motorunu kolayca oluşturup indeksleme ve arama yapabilmenizi sağlayan bir komut satırı arayüzü sunar.
- Referans dokümantasyonu: En güncel sürüm için referans dokümantasyonu sağlar.
Projeyi destekleme yolları
- Tantivy'yi kullanın ve deneyimlerinizi paylaşın.
- Hata raporu gönderin.
- Blog yazısı yazın.
- Dokümantasyona yardımcı olun.
- Koda katkıda bulunun.
Kod katkısı
- GitHub Pull Request iş akışını kullanır.
- Katkı yaparken ilgili GitHub biletine referans verin ve kapsamlı commit mesajları yazın.
SSS
- Diğer dil desteği: Python, Ruby gibi çeşitli dil binding'leri sunar.
- Kullanım örnekleri: seshat, tantiny, lnx gibi çeşitli projelerde kullanılır.
- Hız karşılaştırması: Lucene'den yaklaşık 2 kat daha hızlıdır.
- Artımlı indeksleme desteği: Evet.
- Belge düzenleme: Belgeler değiştirilemez. Silip yeniden indekslemek gerekir.
- İndeksleme sırasında ne zaman aranabilir:
commit çağrısından sonra aranabilir.
GN⁺ görüşü
- Rust tabanlı yüksek performans: Rust'ın performansını ve güvenliğini kullanan hızlı bir arama motoru olarak, performansın kritik olduğu projeler için uygundur.
- Çoklu dil desteği: Python, Ruby gibi çeşitli dil binding'leri sayesinde farklı ortamlarda kullanılabilir.
- Artımlı indeksleme: Büyük ölçekli veri işleme için faydalı bir özelliktir.
- Belge değişmezliği: Veri tutarlılığını korur ancak belge değiştirileceğinde yeniden indeksleme gerektirir.
- Quickwit ile birlikte kullanım: Dağıtık arama gerektiğinde Quickwit ile birlikte kullanmak faydalı olabilir.
1 yorum
Hacker News görüşleri
Proje deneyimi paylaşımı: Eski bir Python2 AppEngine kod tabanını değiştirmek için bu kütüphane kullanılarak <a href="https://progscrape.com" rel="nofollow">progscrape.com</a> yeniden inşa edildi. Kütüphane çok hızlıydı ve Raspberry Pi üzerinde 1M hikâyeyi birkaç saniyede indeksleyebildi. CPU kullanımı çok düşüktü ve arama performansı da mükemmeldi.
ParadeDB ve Tantivy: Tantivy yakın zamanda ParadeDB'de (Postgres eklentisi) keşfedildi. Yüksek performanslı analiz için Postgres'i genişletmekte kullanılıyor.
Quickwit ve Clickhouse: Çok dilli bir arama projesinde Quickwit ile Clickhouse'un birleşik performansı çok iyiydi. Özellikle Çince, Japonca ve Korece aramalar için faydalıydı.
to_tsvector'un sınırları: PostgreSQL'in to_tsvector'u belirli kullanım senaryolarına pek uymadı. Tantivy'ye başarılar dileniyor.
Quickwit'in üretim ortamı dağıtımı: Quickwit kullanılarak milyarlarca nesne indekslendi ve indeksleme hızıyla sorgu gecikmesi rekabetçiydi. Hesaplama ile depolamanın ayrılması çok faydalıydı.
Tantivy'nin performansı: Tantivy'nin performansı ve kurucuların emeği etkileyiciydi. Ekibin başarılı olacağına kesin gözüyle bakılıyor.
Etsy/Hound'un trigram araması: Russ Cox'un regex eşleştirmesine dayanan Go dilindeki trigram arama indeksiyle çalışma deneyimi vardı.
Tantivy'yi seçme nedeni: Elasticsearch'ün kaynak tüketiminden hayal kırıklığına uğrandığı için Tantivy tercih edildi. Projeyi Rust ile yürütmek isteniyordu ve Tantivy'nin performansı ile dokümantasyonu çok iyiydi.
Lucene ve Solr'un yükseltme sorunu: Lucene ve Solr'da indeks yükseltme desteği yetersiz. Birçok büyük projede yeniden indeksleme çok pahalı ve bazen imkânsız.
Alan ekleme/çıkarma sınırları: Tantivy'de alan eklemek veya kaldırmak mümkün değil; tüm verilerin başka bir arama indeksine yeniden indekslenmesi gerekiyor.
Meilisearch alternatifi: Meilisearch'ün telemetri sorunu nedeniyle Tantivy alternatif olarak bulundu. Kurulumu basit görünüyor.
LanceDb ve Tantivy: LanceDb adlı bir vektör veritabanı ürünü, tam metin arama özelliği sağlamak için Tantivy kullanıyor. Şu anda bu yalnızca Python binding'leri üzerinden mümkün, ancak Rust binding'leri uygulanmaya çalışılıyor.