- 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
-
- 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
-
- 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
Memang ada satu isu sih..
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.
Komentar Hacker News
TypeScript 115 baris memang tergolong ringan, tetapi bisa saja ada fitur penting yang hilang
Menyadari bahwa fitur pencarian bisa diimplementasikan dengan mudah
Sering memakai Fuse di aplikasi JavaScript
Jika memakai alat seperti FlexSearch atau lunr, membangun indeks untuk ribuan item sangat cepat
Pertanyaan tentang apa keuntungan dari pendekatan tanpa indeks