12 पॉइंट द्वारा GN⁺ 2024-12-30 | 3 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 करता है
    1. 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
    1. regular expression match और document length के आधार पर TF-IDF ranking की गणना
    • document के word count के बजाय document की length (character count) का उपयोग करके TF-IDF का approximation किया जाता है

3 टिप्पणियां

 
yangeok 2025-01-06

हालाँकि, एक issue है..

 
beenzinozino 2025-01-04

दिलचस्प लगा, इसलिए मैंने इसे देखा, लेकिन 3 साल से इसका maintenance नहीं हुआ है... क्या वाकई यह लाइब्रेरी इतनी परफेक्ट है कि maintenance की ज़रूरत ही नहीं पड़ी...? यह सवाल उठता है।

 
GN⁺ 2024-12-30
Hacker News राय
  • 115 लाइनों का TypeScript हल्का है, लेकिन इसमें महत्वपूर्ण फीचर्स छूट सकते हैं

    • अलग-अलग JavaScript विकल्पों के आकार, फीचर सेट और परफ़ॉर्मेंस की तुलना करने के लिए एक लिंक दिया गया है
    • कुछ साल पहले uFuzzy चुनने का अपना अनुभव साझा किया गया
  • यह एहसास हुआ कि search functionality को आसानी से implement किया जा सकता है

    • यह एक बहुत ही स्मार्ट regular expression engine है
    • fuzzy search (जैसे California की जगह Califnia) को यह कैसे handle करता है, यह स्पष्ट नहीं है, लेकिन implementation को समझना दिलचस्प है
  • JavaScript apps में Fuse का अक्सर उपयोग करता हूँ

    • कई app search typo handle नहीं कर पाते, जो काफ़ी निराशाजनक है
  • FlexSearch या lunr जैसे tools इस्तेमाल करने पर, हज़ारों items के लिए index बनाना बहुत तेज़ होता है

    • जब user search interface खोलता है तब index बनाया जा सकता है, और उपयोग के बाद उसे भूल जाना भी ठीक है
  • बिना index होने का फ़ायदा क्या है, इस पर सवाल

    • छोटे और सरल programs को पसंद करता हूँ
    • यह grep जैसा लगता है