12 poin oleh GN⁺ 2024-12-30 | 3 komentar | Bagikan ke WhatsApp
  • Library sederhana untuk melakukan pencarian teks tanpa indeks di JavaScript
  • Dapat digunakan di berbagai proyek, serta menyediakan pengurutan hasil berbasis TF-IDF dan performa pencarian yang cepat
  • Tidak selengkap FlexSearch atau lunr.js, tetapi jauh lebih cepat dan efisien daripada text.indexOf(query) > -1
  • Berguna untuk aplikasi web sederhana yang menangani dataset kecil

Fitur utama

  • Pencarian tanpa indeks: tidak memerlukan proses pra-pengindeksan untuk melakukan pencarian
  • Mendukung berbagai opsi pencarian:
    • peka huruf besar/kecil
    • mendukung pencarian kata, pencarian prefiks, dan pencarian gaya autocomplete
  • Performa cepat: bahkan beberapa ribu item bisa dicari secara real-time
  • Menyediakan peringkat TF-IDF: mengurutkan hasil pencarian berdasarkan yang "paling relevan"

API

  • Fungsi search menerima dua argumen wajib dan dua argumen opsional.
  • items: daftar item yang akan dicari. Biasanya berupa array string atau array objek yang memiliki properti string.
  • query: kueri string yang akan dicari.
  • by (opsional): fungsi yang mengembalikan nilai string dari item. Nilai default adalah x => String(x).
  • options (opsional): objek yang berisi opsi pencarian.
    • caseSensitive: apakah peka huruf besar/kecil. Nilai default false.
    • mode: cara mencocokkan kata kueri yang belum lengkap.
      • mode: 'word': hanya mencocokkan kata utuh.
      • mode: 'prefix': mencocokkan sebagai prefiks kata.
      • mode: 'autocomplete': mode hibrida di mana kata kueri terakhir bisa tidak lengkap.

Contoh penggunaan

import { search } from 'libsearch'; // lingkungan Node.js  
const { search } = window.libsearch; // lingkungan browser  
  
// Pencarian dasar  
search(articles, 'berkeley cali', a => a.title);  
// => [{ title: 'Weather in Berkeley, California' }]  
  
// Pencarian per kata: “California” hanya mencari “California”  
search(articles, 'california', a => a.title, { mode: 'word' });  
  
// Pencarian peka huruf besar/kecil: cari dengan huruf besar “W”  
search(articles, 'W', a => a.title, { caseSensitive: true });  
  
// Menangani kueri kosong: kembalikan semua hasil  
search(articles, '', a => a.title);  

Cara kerja pencarian

  • libsearch melakukan pencarian teks lengkap dengan cepat pada daftar objek JavaScript tanpa indeks pencarian yang dibangun sebelumnya
    1. Mengubah kueri menjadi regular expression
    • Memanfaatkan mesin regular expression yang telah dioptimalkan pada engine JavaScript modern untuk mengubah string kueri menjadi filter regular expression lalu melakukan pencarian
    • Contoh: “Uni of California” → (^|\W)Uni($|\W), (^|\W)of($|\W), (^|\W)California
    1. Menghitung peringkat TF-IDF berdasarkan kecocokan regular expression dan panjang dokumen
    • Mengaproksimasi TF-IDF dengan menggunakan panjang dokumen (jumlah karakter), bukan jumlah kata dalam dokumen

3 komentar

 
yangeok 2025-01-06

Memang ada satu isu sih..

 
beenzinozino 2025-01-04

Saya tertarik lalu mencobanya, tetapi ternyata sudah 3 tahun tidak dipelihara... Apakah ini karena library-nya memang sudah sempurna sehingga tidak perlu maintenance...? Jadi membuat saya bertanya-tanya.

 
GN⁺ 2024-12-30
Komentar Hacker News
  • TypeScript 115 baris memang tergolong ringan, tetapi bisa saja ada fitur penting yang hilang

    • Menyediakan tautan untuk membandingkan ukuran, set fitur, dan performa dari berbagai alternatif JavaScript
    • Berbagi pengalaman memilih uFuzzy beberapa tahun lalu
  • Menyadari bahwa fitur pencarian bisa diimplementasikan dengan mudah

    • Mesin regular expression yang sangat pintar
    • Tidak jelas bagaimana pencarian samar menangani hal seperti Califnia alih-alih California, tetapi menarik untuk memahami implementasinya
  • Sering memakai Fuse di aplikasi JavaScript

    • Banyak pencarian dalam aplikasi yang tidak bisa menangani typo, dan itu membuat frustrasi
  • Jika memakai alat seperti FlexSearch atau lunr, membangun indeks untuk ribuan item sangat cepat

    • Tidak masalah jika indeks dibangun saat pengguna membuka antarmuka pencarian, lalu dilupakan setelah selesai digunakan
  • Pertanyaan tentang apa keuntungan dari pendekatan tanpa indeks

    • Lebih menyukai program yang kecil dan sederhana
    • Terlihat mirip grep