1 puan yazan GN⁺ 2024-05-28 | 1 yorum | WhatsApp'ta paylaş

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

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