- JavaScript में index के बिना text search करने के लिए एक सरल library
- विभिन्न प्रोजेक्ट्स में उपयोग की जा सकती है और TF-IDF आधारित result ranking तथा तेज search performance प्रदान करती है
- FlexSearch या lunr.js जितनी सुविधाएँ नहीं हैं, लेकिन
text.indexOf(query) > -1 की तुलना में कहीं अधिक तेज और कुशल है
- छोटे dataset संभालने वाले सरल web application में उपयोगी
मुख्य विशेषताएँ
- बिना index के search: search के लिए पहले से indexing process की आवश्यकता नहीं
- विभिन्न search options का समर्थन:
- case-sensitive
- word search, prefix search, autocomplete style search का समर्थन
- तेज performance: कुछ हज़ार items में भी real-time search संभव
- TF-IDF ranking प्रदान करता है: search result को "सबसे अधिक प्रासंगिक" क्रम में sort करता है
API
search function दो आवश्यक arguments और दो वैकल्पिक arguments लेता है।
items: search किए जाने वाले items की list। आमतौर पर string array या string property वाले object array।
query: search की जाने वाली string query।
by (वैकल्पिक): item से string value लौटाने वाला function। default x => String(x) है।
options (वैकल्पिक): search options वाला object।
caseSensitive: case-sensitive matching करना है या नहीं। default false है।
mode: अधूरे query word को match करने का तरीका।
mode: 'word': केवल पूरे word match करता है।
mode: 'prefix': word के prefix के रूप में match करता है।
mode: 'autocomplete': hybrid mode, जिसमें आख़िरी query word अधूरा हो सकता है।
उपयोग उदाहरण
import { search } from 'libsearch'; // Node.js environment
const { search } = window.libsearch; // browser environment
// basic search
search(articles, 'berkeley cali', a => a.title);
// => [{ title: 'Weather in Berkeley, California' }]
// word-level search: “California” से केवल “California” ही खोजें
search(articles, 'california', a => a.title, { mode: 'word' });
// case-sensitive search: uppercase “W” से खोजें
search(articles, 'W', a => a.title, { caseSensitive: true });
// empty query handling: सभी result लौटाएँ
search(articles, '', a => a.title);
search कैसे काम करता है
- libsearch पहले से बने search index के बिना JavaScript object list में तेज full-text search करता है
-
- query को regular expression में बदलना
- आधुनिक JavaScript engine के optimized regular expression engine का उपयोग करके query string को regular expression filter में बदलकर search किया जाता है
- उदाहरण: “Uni of California” → (^|\W)Uni($|\W), (^|\W)of($|\W), (^|\W)California
-
- regular expression match और document length के आधार पर TF-IDF ranking की गणना
- document के word count के बजाय document की length (character count) का उपयोग करके TF-IDF का approximation किया जाता है
3 टिप्पणियां
हालाँकि, एक issue है..
दिलचस्प लगा, इसलिए मैंने इसे देखा, लेकिन 3 साल से इसका maintenance नहीं हुआ है... क्या वाकई यह लाइब्रेरी इतनी परफेक्ट है कि maintenance की ज़रूरत ही नहीं पड़ी...? यह सवाल उठता है।
Hacker News राय
115 लाइनों का TypeScript हल्का है, लेकिन इसमें महत्वपूर्ण फीचर्स छूट सकते हैं
यह एहसास हुआ कि search functionality को आसानी से implement किया जा सकता है
JavaScript apps में Fuse का अक्सर उपयोग करता हूँ
FlexSearch या lunr जैसे tools इस्तेमाल करने पर, हज़ारों items के लिए index बनाना बहुत तेज़ होता है
बिना index होने का फ़ायदा क्या है, इस पर सवाल