एक वीडियो-होस्टिंग सेवा के पीछे की इंजीनियरिंग टीम ने अपने SQLite FTS5 इंडेक्स को OpenSearch क्लस्टर से बदल दिया, जिससे शून्य-परिणाम (zero-result) वाली क्वेरीज़ 12% से घटकर 1.4% रह गईं और लेटेंसी (latency) को 28 ms से कम रखते हुए सर्च-टू-क्लिक रेट में 9% की वृद्धि हुई।

यह बदलाव तत्काल क्यों आवश्यक हो गया

SQLite का फुल-टेक्स्ट सर्च एक्सटेंशन (FTS5) आकर्षक है: यह बाकी डेटा के साथ एक ही फ़ाइल में रहता है, इसमें कोई लाइसेंसिंग लागत नहीं लगती है, और सटीक टोकन मैच के लिए तुरंत परिणाम देता है। हालाँकि, प्लेटफॉर्म के लॉग्स से पता चला कि उपयोगकर्ताओं की बारह प्रतिशत खोजों में कुछ भी परिणाम नहीं मिला। "intersteller" या "avengrs endgame" जैसी वर्तनी की गलतियाँ (misspellings) – जो लोग मोबाइल कीबोर्ड पर करते हैं – इसके मुख्य कारण थे।

ट्राइग्राम्स (trigrams - तीन-कैरेक्टर के टुकड़े) का उपयोग करके किए गए एक त्वरित हैक ने खाली-खोज (blank-search) की दर को घटाकर 7% कर दिया, लेकिन इससे दो समस्याएँ पैदा हो गईं। पहला, इंडेक्स अपने मूल आकार से तीन गुना से अधिक बढ़ गया, जिससे स्टोरेज लागत बढ़ गई और अपडेट धीमे हो गए। दूसरा, प्रासंगिकता (relevance) प्रभावित हुई; फजी मैचिंग (fuzzy matching) ने असंबंधित वीडियो का एक शोर भरा मिश्रण (noisy mix) पेश किया, जिससे उपयोगकर्ता भ्रमित हो गए।

टीम ने निष्कर्ष निकाला कि एक विशेष रूप से निर्मित (purpose-built) सर्च इंजन की आवश्यकता है, जिसमें नेटिव टाइपो-टॉलरेंस (typo-tolerance) और परिष्कृत प्रासंगिकता स्कोरिंग (relevance scoring) हो।

OpenSearch पाइपलाइन बनाना

SQLite को सोर्स ऑफ ट्रुथ (source of truth) के रूप में रखें

OpenSearch एक डिस्पोजेबल, रीड-ओनली रेप्लिका (read-only replica) के रूप में कार्य करता था। सारा वीडियो मेटाडेटा SQLite में ही रहा; डेटा खोने के जोखिम के बिना सर्च इंडेक्स को फिर से बनाया जा सकता था। जब OpenSearch क्लस्टर डाउन हो जाता, तो एप्लिकेशन स्वचालित रूप से मूल FTS5 इंजन पर वापस आ जाता।

"should" क्वेरी के साथ लेयर्ड प्रासंगिकता (Layered relevance)

केवल फजी मैचिंग पर निर्भर रहने के बजाय, क्वेरी में तीन क्लॉज़ (clauses) को जोड़ा गया:

  • Exact phrase match – उच्चतम बूस्ट, उन उपयोगकर्ताओं को पुरस्कृत करता है जिन्होंने शीर्षक सही ढंग से टाइप किया है।
  • All terms present – मध्यम बूस्ट, उन क्वेरीज़ को पकड़ता है जहाँ हर शब्द मौजूद है लेकिन ज़रूरी नहीं कि वे क्रम में हों।
  • Fuzzy match – कम बूस्ट, गलत वर्तनी वाले टोकन के लिए एक सुरक्षा जाल (safety net) के रूप में कार्य करता है।

इस पदानुक्रम (hierarchy) ने सटीक क्वेरीज़ के लिए सटीकता (precision) बनाए रखी, जबकि टाइपो के लिए एक लचीला विकल्प (forgiving fallback) भी प्रदान किया।

फजी सेटिंग्स को ट्यून करना

1 की प्रीफ़िक्स लंबाई (prefix length) ने फजी लॉजिक लागू होने से पहले प्रत्येक शब्द के पहले अक्षर का मेल होना अनिवार्य कर दिया। इस नियम ने सर्च को तेज़ रखा और संभावित शब्दों (candidate terms) के उस विस्फोट को रोका जो मेमोरी को ओवरलोड कर सकते हैं। टीम ने टर्म एक्सपेंशन (term expansions) की अधिकतम संख्या को भी सीमित कर दिया, जो अनियंत्रित संसाधन उपयोग के खिलाफ एक और सुरक्षा उपाय (guardrail) था।

सिंक्रोनाइज़ेशन रणनीति

तीन पूरक प्रक्रियाएँ OpenSearch इंडेक्स को SQLite के साथ संरेखित (aligned) रखती हैं:

  • नया डेटा सिंक करने के लिए एक cron job।
  • Nightly diff pass – उन विसंगतियों (mismatches) को स्कैन करता है जो इंक्रीमेंटल अपडेट्स से छूट गई हों।
  • Weekly full rebuild – एक इंडेक्स एलियास (index alias) के पीछे चलता है, फिर एक ही ऑपरेशन में एलियास को बदल देता है, जिससे जीरो डाउनटाइम सुनिश्चित होता है।

दो सप्ताह के बाद मापने योग्य प्रभाव

  • शून्य-परिणाम वाली क्वेरीज़ 12% से घटकर 1.4% रह गईं।
  • सर्च-टू-क्लिक कन्वर्जन में 9% की वृद्धि हुई।
  • मीडियन लेटेंसी (median latency) 28 ms से नीचे रही, जो प्लेटफॉर्म के यूजर-एक्सपीरियंस लक्ष्य के भीतर है।

सावधानियां और प्रति-तर्क

यह माइग्रेशन कोई 'प्लग-एंड-प्ले' अपग्रेड नहीं है। टीम इस बात पर ज़ोर देती है कि प्राथमिक डेटाबेस को कभी भी सर्च इंजन से नहीं बदला जाना चाहिए; सारा वीडियो मेटाडेटा रखने के लिए SQLite ही आधिकारिक स्टोर (authoritative store) बना हुआ है।

निष्कर्ष

एक विशेष रूप से निर्मित सर्च इंजन के माध्यम से टाइपो-टॉलरेंस जोड़ने से उपयोगकर्ता की यात्रा (user journey) में आने वाला एक स्पष्ट अवरोध एक सुचारू और तेज़ अनुभव में बदल गया। यह केस स्टडी दिखाती है कि एक अनुशासित आर्किटेक्चर – रिलेशनल स्टोर को सोर्स ऑफ ट्रुथ के रूप में रखना, प्रासंगिकता की परतें बनाना और फजी लॉजिक को सुरक्षित रखना – स्थिरता से समझौता किए बिना मापने योग्य लाभ दे सकता है।

स्रोत: https://dev.to/ahmet_gedik778845/migrating-video-title-search-from-sqlite-fts5-to-opensearch-fuzzy-queries-4bhj