12 puan yazan GN⁺ 2024-12-30 | 3 yorum | WhatsApp'ta paylaş
  • JavaScript'te indeks olmadan metin araması yapan basit bir kütüphane
  • Çeşitli projelerde kullanılabilir; TF-IDF tabanlı sonuç sıralaması ve hızlı arama performansı sunar
  • FlexSearch veya lunr.js kadar özellikli değildir, ancak text.indexOf(query) > -1 yaklaşımından çok daha hızlı ve verimlidir
  • Küçük veri kümeleriyle çalışan basit web uygulamalarında kullanışlıdır

Başlıca özellikler

  • İndeks olmadan arama: Arama için önceden indeksleme süreci gerekmez
  • Çeşitli arama seçenekleri desteği:
    • Büyük/küçük harf duyarlılığı
    • Kelime araması, önek araması, otomatik tamamlama tarzı arama desteği
  • Hızlı performans: Birkaç bin öğe bile gerçek zamanlı aranabilir
  • TF-IDF sıralaması sağlar: Arama sonuçlarını "en alakalı" sırayla dizeler

API

  • search fonksiyonu iki zorunlu ve iki isteğe bağlı argüman alır.
  • items: Aranacak öğe listesi. Genellikle bir dizi string veya string özelliğine sahip nesne dizisidir.
  • query: Aranacak string sorgu.
  • by (isteğe bağlı): Öğeden string değer döndüren fonksiyon. Varsayılan değer x => String(x)'tir.
  • options (isteğe bağlı): Arama seçeneklerini içeren nesne.
    • caseSensitive: Büyük/küçük harf duyarlılığı. Varsayılan değer false.
    • mode: Eksik sorgu kelimelerini eşleştirme yöntemi.
      • mode: 'word': Yalnızca tam kelimeleri eşleştirir.
      • mode: 'prefix': Kelime önekleriyle eşleştirir.
      • mode: 'autocomplete': Son sorgu kelimesinin eksik olabildiği hibrit mod.

Kullanım örneği

import { search } from 'libsearch'; // Node.js ortamı  
const { search } = window.libsearch; // Tarayıcı ortamı  
  
// Temel arama  
search(articles, 'berkeley cali', a => a.title);  
// => [{ title: 'Weather in Berkeley, California' }]  
  
// Kelime düzeyinde arama: “California” yalnızca “California” için arama yapar  
search(articles, 'california', a => a.title, { mode: 'word' });  
  
// Büyük/küçük harf duyarlı arama: büyük “W” ile arama  
search(articles, 'W', a => a.title, { caseSensitive: true });  
  
// Boş sorgu işleme: tüm sonuçları döndürür  
search(articles, '', a => a.title);  

Arama nasıl çalışır

  • libsearch, önceden oluşturulmuş bir arama indeksi olmadan JavaScript nesne listelerinde hızlı tam metin araması yapar
    1. Sorguyu düzenli ifadeye dönüştürme
    • Modern JavaScript motorlarının optimize edilmiş düzenli ifade motorunu kullanarak sorgu string'ini bir düzenli ifade filtresine dönüştürür ve aramayı gerçekleştirir
    • Örnek: “Uni of California” → (^|\W)Uni($|\W), (^|\W)of($|\W), (^|\W)California
    1. Düzenli ifade eşleşmeleri ve belge uzunluğuna dayalı TF-IDF sıralaması hesaplama
    • Belgedeki kelime sayısı yerine belge uzunluğunu (karakter sayısını) kullanarak TF-IDF'yi yaklaşıklar

3 yorum

 
yangeok 2025-01-06

Yine de bir sorun var gibi görünüyor..

 
beenzinozino 2025-01-04

İlgi çekici geldiği için baktım ama 3 yıldır bakım yapılmamış... Acaba kütüphane kusursuz olduğu için mi bakım yapılmıyor...? İnsanın aklında soru işareti oluşuyor.

 
GN⁺ 2024-12-30
Hacker News yorumu
  • 115 satırlık TypeScript hafif sayılır, ancak önemli işlevler eksik olabilir

    • Çeşitli JavaScript alternatiflerinin boyutunu, özellik setini ve performansını karşılaştırabilecek bir bağlantı sağlıyor
    • Birkaç yıl önce uFuzzy'yi seçme deneyimini paylaşıyor
  • Arama işlevinin kolayca uygulanabildiğini fark ediyor

    • Oldukça akıllı bir düzenli ifade motoru
    • Belirsiz aramayı (ör. California yerine Califnia) nasıl ele aldığı net değil, ama uygulamayı anlamak ilginç
  • JavaScript uygulamalarında sık sık Fuse kullanıyor

    • Birçok uygulama içi aramanın yazım hatalarını kaldıramaması sinir bozucu
  • FlexSearch veya lunr gibi araçlar kullanıldığında binlerce öğe için indeks oluşturma çok hızlı

    • Kullanıcı arama arayüzünü açtığında indeksi oluşturup, sonrasında unutmak sorun değil
  • İndekssiz olmanın avantajının ne olduğu soruluyor

    • Küçük ve basit programları tercih ediyor
    • grepe benziyor