ഒരു ഡെവലപ്പർ ടീം OpenSearch-ഉം SQLite FTS5-ഉം സംയോജിപ്പിച്ചതിലൂടെ, വീഡിയോ സെർച്ചുകളിൽ ഫലങ്ങളൊന്നും ലഭിക്കാത്ത സാഹചര്യം (zero-result searches) 11.4 ശതമാനത്തിൽ നിന്ന് 2.1 ശതമാനമായി കുറച്ചു, ഒപ്പം ലേറ്റൻസി (latency) 20 ms-ൽ താഴെയായി നിലനിർത്തുകയും ചെയ്തു. ഇപ്പോൾ ഉപയോക്താക്കൾ “blackpink jenny solo stag” എന്ന് ടൈപ്പ് ചെയ്താൽ, ഒരു ശൂന്യമായ ലിസ്റ്റിന് പകരം ശരിയായ “BLACKPINK Jennie SOLO stage” കാണാൻ സാധിക്കുന്നു.

എന്തുകൊണ്ടാണ് ഈ മാറ്റം ആവശ്യമായി വന്നത്

ഒരു വീഡിയോ-ഹോസ്റ്റിംഗ് പ്ലാറ്റ്‌ഫോമിൽ നിന്നുള്ള സെർച്ച് ലോഗുകൾ ഒരു ആവർത്തിച്ചുവരുന്ന പ്രശ്നം ചൂണ്ടിക്കാട്ടി: ലാറ്റിൻ സ്ക്രിപ്റ്റിലുള്ള (Latin-script) ഒരു ടൈപ്പിംഗ് പിശക് (typo) പോലും സെർച്ച് ഫലങ്ങളെ പൂർണ്ണമായും ഇല്ലാതാക്കുന്നു. ചൈനീസ്, ജാപ്പനീസ്, കൊറിയൻ (CJK) ടെക്സ്റ്റുകളിലെ സബ്സ്ട്രിംഗുകൾ (substrings) കണ്ടെത്താനുള്ള കഴിവിനായി പ്രശസ്തമായ SQLite-ന്റെ FTS5 എക്സ്റ്റൻഷൻ, 'ഫസി മാച്ചിംഗ്' (fuzzy matching) നൽകുന്നില്ല. ഒരു പേരോ പാട്ടിന്റെ തലക്കെട്ടോ ടൈപ്പ് ചെയ്യുമ്പോൾ ഒരു അക്ഷരം തെറ്റിയാൽ പോലും ക്വറി (query) പൂർണ്ണമായും പരാജയപ്പെടുന്നു.

നിലവിലുണ്ടായിരുന്ന പൈപ്പ്‌ലൈനിൽ SQLite മാത്രമായിരുന്നു ഏക ഇൻഡക്സ് ആയി ഉപയോഗിച്ചിരുന്നത്. ഇത് CJK ക്വറികൾ മികച്ച രീതിയിൽ കൈകാര്യം ചെയ്തിരുന്നെങ്കിലും, ലാറ്റിൻ സ്ക്രിപ്റ്റിലെ ടൈപ്പിംഗ് പിശകുകൾക്ക് ഒരു പരിഹാരവും നൽകിയിരുന്നില്ല. അതിനാൽ, നിലവിലുള്ള FTS5 ലെയറിനെ ഒഴിവാക്കാതെ തന്നെ ടൈപ്പിംഗ് പിശകുകൾ പരിഹരിക്കാൻ കഴിയുന്ന ഒരു അനുബന്ധ സെർച്ച് എഞ്ചിനായി ടീം ശ്രമിച്ചു.

എങ്ങനെയാണ് OpenSearch കൂട്ടിച്ചേർത്തത്

OpenSearch ഒരു ഫ്രണ്ട്-ലൈൻ സെർച്ച് സർവീസായി പ്രവർത്തിക്കുന്നു; SQLite ആണ് പ്രധാന ഡാറ്റാ സ്രോതസ്സ് (source of truth). ഈ രണ്ട് സംവിധാനങ്ങളും സമാന്തരമായി പ്രവർത്തിക്കുന്നു: ഉപയോക്താവിന്റെ ക്വറി ആദ്യം ലഭിക്കുന്നത് OpenSearch-നാണ്, അത് വേഗത്തിൽ പ്രതികരിക്കുകയാണെങ്കിൽ അതിന്റെ ഫലങ്ങൾ കാണിക്കുന്നു. എന്നാൽ OpenSearch ടൈം ഔട്ട് ആകുകയോ എറർ സംഭവിക്കുകയോ ചെയ്താൽ, റിക്വസ്റ്റ് SQLite FTS5 ഇൻഡക്സിലേക്ക് മാറുന്നു. ഈ "fail-safe" ഡിസൈൻ കാരണം നെറ്റ്‌വർക്ക് തടസ്സങ്ങൾ ഉണ്ടായാലും സെർച്ച് ബാർ ശൂന്യമായിരിക്കില്ല എന്ന് ഉറപ്പാക്കുന്നു.

മൾട്ടി-ഫീൽഡ് മാപ്പിംഗ് (Multi-field mapping)

ഓരോ വീഡിയോ ടൈറ്റിലും OpenSearch-ൽ മൂന്ന് രീതിയിൽ ഇൻഡക്സ് ചെയ്യുന്നു:

  • title.std – ASCII folding ഉപയോഗിച്ചുള്ള ഒരു സ്റ്റാൻഡേർഡ് അനലൈസർ വഴി പ്രോസസ്സ് ചെയ്യുന്നു. ഇത് അക്സന്റഡ് ക്യാരക്ടറുകളെ (accented characters) നോർമലൈസ് ചെയ്യുകയും മിക്ക ലാറ്റിൻ സ്ക്രിപ്റ്റ് ടൈപ്പുകളും കൈകാര്യം ചെയ്യുകയും ചെയ്യുന്നു.
  • title.cjk – ബിഗ്രാമുകൾ (bigrams - രണ്ട് ക്യാരക്ടർ ടോക്കണുകൾ) നിർമ്മിക്കുന്ന ഒരു CJK അനലൈസർ വഴി പ്രോസസ്സ് ചെയ്യുന്നു. ഇത് ഏഷ്യൻ ഭാഷകൾക്കായി FTS5 നൽകുന്ന സബ്സ്ട്രിംഗ് മാച്ചിംഗ് കരുത്ത് നിലനിർത്തുന്നു.
  • title.keyword – കൃത്യമായ മാച്ച് (exact-match) കണ്ടെത്താനും സോർട്ടിംഗിനുമായി മാറ്റമില്ലാതെ സൂക്ഷിക്കുന്നു.

വ്യത്യസ്ത ഫീൽഡുകൾ ഉപയോഗിക്കുന്നതിലൂടെ, ടോക്കണൈസേഷൻ രീതികൾ (tokenisation strategies) കലരാതെ തന്നെ ഓരോ സ്ക്രിപ്റ്റിനും അനുയോജ്യമായ അനാലിസിസ് നൽകാൻ ക്വറിക്ക് സാധിക്കുന്നു.

ബൂസ്റ്റ് ടയറുകൾ (Boost tiers)

ഒറ്റപ്പെട്ട ഒരു ക്വറിക്ക് പകരം, ഫലങ്ങളെ സ്വയം റാങ്ക് ചെയ്യുന്ന രീതിയിലുള്ള ഒരു ടയേർഡ് ക്വറി (tiered query) ആണ് ടീം നിർമ്മിച്ചത്:

  1. title.keyword-ലെ കൃത്യമായ ഫ്രേസ് മാച്ചുകൾക്ക് (Exact phrase matches) ഏറ്റവും ഉയർന്ന ബൂസ്റ്റ് നൽകുന്നു, ഇത് കൃത്യമായ ഫലങ്ങൾ ലിസ്റ്റിൽ മുൻപന്തിയിൽ വരുന്നു എന്ന് ഉറപ്പാക്കുന്നു.
  2. title.cjk-ലെ CJK ബിഗ്രാം മാച്ചുകൾക്ക് (CJK bigram matches) ഇടത്തരം ബൂസ്റ്റ് നൽകുന്നു, ഇത് ഏഷ്യൻ ഭാഷാ സെർച്ചുകളുടെ ഗുണനിലവാരം നിലനിർത്തുന്നു.
  3. title.std-ലെ ഫസി ലാറ്റിൻ മാച്ചുകൾക്ക് (Fuzzy Latin matches) കുറഞ്ഞ ബൂസ്റ്റ് നൽകുന്നു, ഇത് കൃത്യമായ ഫലങ്ങളെ മറയ്ക്കാതെ തന്നെ ടൈപ്പിംഗ് പിശകുകൾ പരിഹരിക്കുന്ന ഫലങ്ങൾ കാണാൻ സഹായിക്കുന്നു.

ഈ ടയേർഡ് സമീപനം ട്യൂണിംഗ് (tuning) എളുപ്പമാക്കുന്നു: ഒരു ബൂസ്റ്റ് വാല്യൂ മാറ്റുന്നതിലൂടെ ആ വിഭാഗത്തിൽപ്പെട്ട എല്ലാ മാച്ചുകളുടെയും പ്രാധാന്യം മാറ്റാൻ സാധിക്കും.

സ്മാർട്ട് ഫസിനസ് (Smart fuzziness)

പരിമിതമായ എണ്ണം ക്യാരക്ടർ മാറ്റങ്ങൾ അനുവദിക്കുന്ന 'ഫസിനസ്' (Fuzziness), ലാറ്റിൻ ഫീൽഡിന് മാത്രമാണ് ബാധകമാക്കിയത്. CJK ഭാഷകളിൽ ഒരു അക്ഷരം മാറിയാൽ പോലും അതിന്റെ അർത്ഥം പൂർണ്ണമായും മാറാൻ സാധ്യതയുള്ളതിനാൽ title.cjk-ൽ ഫസിനസ് ടീം നിർത്തലാക്കി. ലാറ്റിൻ ടെക്സ്റ്റുകൾക്കായി ക്വറി OpenSearch-ന്റെ AUTO ഫസിനസ് സെറ്റിംഗ് ആണ് ഉപയോഗിക്കുന്നത്. ഇത് വാക്കിന്റെ നീളത്തിനനുസരിച്ച് അനുവദനീയമായ എഡിറ്റ് ഡിസ്റ്റൻസ് (edit distance) ക്രമീകരിക്കുകയും, ടൈപ്പിംഗ് പിശകുകൾ പരിഹരിക്കുന്നതിനും കൃത്യത നിലനിർത്തുന്നതിനും ഇടയിലുള്ള ഒരു സന്തുലിതാവസ്ഥ ഉണ്ടാക്കുകയും ചെയ്യുന്നു.

പെർഫോമൻസും ഫോളബാക്ക് ലോജിക്കും (Performance and fallback logic)

സെർച്ച് റൂട്ടീൻ OpenSearch കോളിനെ ഒരു try-catch ബ്ലോക്കിനുള്ളിൽ ഉൾപ്പെടുത്തിയിരിക്കുന്നു:

  • OpenSearch 400 ms-നുള്ളിൽ മറുപടി നൽകിയാൽ, അതിന്റെ ഫലങ്ങൾ കാണിക്കുന്നു.
  • കോൾ ഒരു എക്സെപ്ഷൻ (exception) ഉണ്ടാക്കുകയോ ടൈം ഔട്ട് ആകുകയോ ചെയ്താൽ, സിസ്റ്റം ഉടൻ തന്നെ SQLite FTS5 ഉപയോഗിച്ച് ക്വറി വീണ്ടും റൺ ചെയ്യുന്നു.

നെറ്റ്‌വർക്ക് ലേറ്റൻസിയോ സർവീസ് തടസ്സങ്ങളോ ഉപയോക്താവിന്റെ അനുഭവം മോശമാക്കില്ലെന്ന് ഇത് ഉറപ്പാക്കുന്നു. സെർച്ച് ലേറ്റൻസി 20 ms-ൽ താഴെയായി നിലനിർത്തി.

അളക്കാവുന്ന സ്വാധീനം (Measurable impact)

  • ലാറ്റിൻ സ്ക്രിപ്റ്റ് ക്വറികളിലെ സീറോ-റിസൾട്ട് നിരക്ക് 11.4 %-ൽ നിന്ന് 2.1 % ആയി കുറഞ്ഞു.
  • CJK ക്വറികളുടെ സെർച്ച് ഗുണനിലവാരത്തിൽ മാറ്റം വന്നില്ല, ഇത് പുതിയ CJK അനലൈസർ പഴയ FTS5 ഇൻഡക്സിന്റെ കരുത്ത് നിലനിർത്തുന്നു എന്ന് സ്ഥിരീകരിക്കുന്നു.
  • എൻഡ്-ടു-എൻഡ് ലേറ്റൻസി 20 ms എന്ന ലക്ഷ്യത്തിന് താഴെയായി നിലനിർത്തി, അതായത് പുതിയ ലെയർ ചേർക്കുന്നത് UI-യുടെ വേഗത കുറച്ചില്ല.

പാഠങ്ങളും വിട്ടുവീഴ്ചകളും (Lessons and trade-offs)

  • ഫോൾഡിംഗും (Folding) ഫസിനസും (Fuzziness) വേർതിരിക്കുക – ഫോൾഡിംഗ് (ക്യാരക്ടറുകളെ നോർമലൈസ് ചെയ്യുക), ഫസിനസ് (ടൈപ്പിംഗ് പിശകുകൾ കൈകാര്യം ചെയ്യുക) എന്നിവ വ്യത്യസ്ത പ്രശ്നങ്ങളെയാണ് പരിഹരിക്കുന്നത്. ഇവ വ്യത്യസ്ത ഫീൽഡുകളിൽ നിലനിർത്തുന്നത് അപ്രതീക്ഷിതമായ പ്രശ്നങ്ങൾ ഒഴിവാക്കാൻ സഹായിക്കുന്നു.
  • സെർച്ച് ഇൻഡക്സിനെ സോഴ്സ് ഓഫ് ട്രൂത്ത് ആയി കാണരുത് – SQLite ആണ് പ്രധാന ഡാറ്റാ സ്റ്റോർ; OpenSearch എന്നത് അതിൽ നിന്ന് നിർമ്മിച്ചതും പുതുക്കാവുന്നതുമായ ഒരു വ്യൂ (view) മാത്രമാണ്. ഇത് ഇൻഡക്സ് വ്യതിയാനം (index drift) തടയുകയും പരാജയങ്ങൾക്ക് ശേഷം സിസ്റ്റം വീണ്ടെടുക്കുന്നത് എളുപ്പമാക്കുകയും ചെയ്യുന്നു.
  • ബൂസ്റ്റ് ടയറുകൾ ട്യൂണിംഗ് എളുപ്പമാക്കുന്നു – ബന്ധപ്പെട്ട മാച്ചുകളെ ഒരു ബൂസ്റ്റ് ഫാക്ടറിന് കീഴിൽ കൊണ്ടുവരുന്നത് ക്രമീകരിക്കേണ്ട പാരാമീറ്ററുകളുടെ എണ്ണം കുറയ്ക്കുന്നു.

അടുത്തതായി ശ്രദ്ധിക്കേണ്ടവ

SQLite FTS5-ന്റെ തെളിയിക്കപ്പെട്ട CJK ശേഷികൾ വിട്ടുവീഴ്ച ചെയ്യാതെ തന്നെ, ബഹുഭാഷാ വീഡിയോ തലക്കെട്ടുകളിലെ ടൈപ്പിംഗ് പിശകുകൾ (typo tolerance) ഗണ്യമായി മെച്ചപ്പെടുത്താൻ ഒരു ചെറിയ OpenSearch ലെയറിന് കഴിയുമെന്ന് ഈ പരീക്ഷണം തെളിയിക്കുന്നു. സെർച്ച് റിലവൻസ് (search relevance) വാച്ച് ടൈമിനെ നേരിട്ട് സ്വാധീനിക്കുന്ന പ്ലാറ്റ്‌ഫോമുകളിൽ, ഈ പുരോഗതി ഉപഭോക്താക്കൾക്ക് അനുഭവവേദ്യമായ ഒരു യൂസർ എക്സ്പീരിയൻസ് (user-experience) നേട്ടം നൽകുന്നു.