- 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
-
- 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
-
- 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
Yine de bir sorun var gibi görünüyor..
İ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.
Hacker News yorumu
115 satırlık TypeScript hafif sayılır, ancak önemli işlevler eksik olabilir
Arama işlevinin kolayca uygulanabildiğini fark ediyor
JavaScript uygulamalarında sık sık Fuse kullanıyor
FlexSearch veya lunr gibi araçlar kullanıldığında binlerce öğe için indeks oluşturma çok hızlı
İndekssiz olmanın avantajının ne olduğu soruluyor
grepe benziyor