ఒక డెవలపర్ టీమ్ OpenSearchను SQLite FTS5తో జతచేసి, సున్నా ఫలితాలు వచ్చే (zero-result) వీడియో సెర్చ్‌లను 11.4 శాతం నుండి 2.1 శాతానికి తగ్గించింది, అదే సమయంలో లేటెన్సీని (latency) 20 ms కంటే తక్కువగా ఉంచింది. ఇప్పుడు వినియోగదారులు “blackpink jenny solo stag” అని టైప్ చేసినప్పుడు, ఖాళీ జాబితాకు బదులుగా సరైన “BLACKPINK Jennie SOLO stage” కనిపిస్తుంది.

ఈ మార్పు ఎందుకు అవసరమైంది

ఒక వీడియో-హోస్టింగ్ ప్లాట్‌ఫారమ్ యొక్క సెర్చ్ లాగ్‌లు ఒక పునరావృత సమస్యను చూపించాయి: లాటిన్-స్క్రిప్ట్ టైటిల్‌లో ఒక చిన్న స్పెల్లింగ్ తప్పు (typo) జరిగినా, అన్ని ఫలితాలు కనిపించకుండా పోతున్నాయి. చైనీస్, జపనీస్ మరియు కొరియన్ (CJK) టెక్స్ట్‌లోని సబ్‌స్ట్రింగ్‌లను (substrings) మ్యాచ్ చేయగల సామర్థ్యం కారణంగా SQLite FTS5 ఎక్స్‌టెన్షన్‌కు ప్రాధాన్యత ఉంది, కానీ ఇది ఫజీ మ్యాచింగ్ (fuzzy matching) చేయదు. పేరు లేదా పాట టైటిల్‌లో ఒక అక్షరం తప్పుగా ఉన్నా, క్వెరీ పూర్తిగా విఫలమవుతుంది.

ప్రస్తుతం ఉన్న పైప్‌లైన్ SQLiteని ఏకైక ఇండెక్స్‌గా పరిగణిస్తోంది. ఇది CJK క్వెరీలను బాగా హ్యాండిల్ చేస్తుంది కానీ లాటిన్-స్క్రిప్ట్ టైపోల (typos) కోసం ఎటువంటి భద్రతను అందించదు. అందువల్ల, ఇప్పటికే ఉన్న FTS5 లేయర్‌ను పక్కన పెట్టకుండానే, టైపోలను తట్టుకోగల (typo tolerance) ఒక అనుబంధ సెర్చ్ ఇంజిన్ కోసం టీమ్ వెతికింది.

OpenSearchను ఎలా జోడించారు

OpenSearch ఫ్రంట్-లైన్ సెర్చ్ సర్వీస్‌గా పనిచేస్తుంది; SQLite మూల సమాచారంగా (source of truth) ఉంటుంది. ఈ రెండు వ్యవస్థలు సమాంతరంగా నడుస్తాయి: మొదట వినియోగదారు క్వెరీ OpenSearchకు అందుతుంది, అది తగినంత వేగంగా స్పందిస్తే, దాని ఫలితాలు చూపబడతాయి. ఒకవేళ OpenSearch టైమ్ అవుట్ (time out) అయినా లేదా ఎర్రర్ వచ్చినా, రిక్వెస్ట్ SQLite FTS5 ఇండెక్స్‌కు మారుతుంది (fallback). ఈ “ఫెయిల్-సేఫ్” (fail-safe) డిజైన్ వల్ల నెట్‌వర్క్ సమస్యల వల్ల సెర్చ్ బార్ ఎప్పుడూ ఖాళీగా ఉండదు.

మల్టీ-ఫీల్డ్ మ్యాపింగ్ (Multi-field mapping)

OpenSearchలో ప్రతి వీడియో టైటిల్ మూడు విధాలుగా ఇండెక్స్ చేయబడింది:

  • title.std – ASCII foldingతో కూడిన స్టాండర్డ్ అనలైజర్ ద్వారా ప్రాసెస్ చేయబడుతుంది. ఇది యాక్సెంట్ చేయబడిన అక్షరాలను నార్మలైజ్ చేస్తుంది మరియు చాలా లాటిన్-స్క్రిప్ట్ టైపోలను హ్యాండిల్ చేస్తుంది.
  • title.cjk – బిగ్రామ్స్ (రెండు అక్షరాల టోకెన్లు) సృష్టించే CJK అనలైజర్ ద్వారా ప్రాసెస్ చేయబడుతుంది. ఇది ఆసియా స్క్రిప్ట్‌ల కోసం FTS5 అందించే సబ్‌స్ట్రింగ్-మ్యాచింగ్ సామర్థ్యాన్ని కాపాడుతుంది.
  • title.keyword – ఖచ్చితమైన మ్యాచింగ్ (exact-match) మరియు సార్టింగ్ కోసం మార్చకుండా నిల్వ చేయబడుతుంది.

టోకెనైజేషన్ వ్యూహాలను కలపకుండానే, ప్రతి స్క్రిప్ట్‌కు సరైన అనాలిసిస్‌ను క్వెరీ వర్తింపజేయడానికి విడివిడి ఫీల్డ్‌లు సహాయపడతాయి.

బూస్ట్ టియర్స్ (Boost tiers)

ఒకే మోనోలిథిక్ క్వెరీకి బదులుగా, టీమ్ ఫలితాలను ఆటోమేటిక్‌గా ర్యాంక్ చేసే టియర్డ్ క్వెరీని రూపొందించింది:

  1. title.keywordలో ఉండే Exact phrase matchesకు అత్యధిక బూస్ట్ ఇవ్వబడుతుంది, తద్వారా ఖచ్చితమైన మ్యాచెస్ జాబితాలో ముందుంటాయి.
  2. title.cjkలో ఉండే CJK bigram matchesకు మధ్యస్థ బూస్ట్ ఇవ్వబడుతుంది, తద్వారా ఆసియా భాషల సెర్చ్ నాణ్యత దెబ్బతినదు.
  3. title.stdలో ఉండే Fuzzy Latin matchesకు తక్కువ బూస్ట్ ఇవ్వబడుతుంది, తద్వారా ఖచ్చితమైన ఫలితాలను ప్రభావితం చేయకుండా టైపో-టాలరెంట్ ఫలితాలు కనిపిస్తాయి.

ఈ టియర్డ్ విధానం ట్యూనింగ్‌ను సులభతరం చేస్తుంది: ఒక బూస్ట్ విలువను సర్దుబాటు చేయడం ద్వారా మొత్తం మ్యాచ్ క్లాస్ యొక్క సాపేక్ష ప్రాముఖ్యతను మార్చవచ్చు.

స్మార్ట్ ఫజినెస్ (Smart fuzziness)

ఫజినెస్ (Fuzziness)—అంటే పరిమిత సంఖ్యలో అక్షర మార్పులను అనుమతించడం—కేవలం లాటిన్ ఫీల్డ్‌కు మాత్రమే వర్తిస్తుంది. title.cjk కోసం టీమ్ ఫజినెస్‌ను నిలిపివేసింది, ఎందుకంటే CJKలో ఒక అక్షరం మారినా అర్థం పూర్తిగా మారిపోవచ్చు. లాటిన్ టెక్స్ట్ కోసం క్వెరీ OpenSearch యొక్క AUTO ఫజినెస్ సెట్టింగ్‌ను ఉపయోగిస్తుంది, ఇది పదం యొక్క పొడవు ఆధారంగా అనుమతించదగిన ఎడిట్ డిస్టెన్స్‌ను (edit distance) సర్దుబాటు చేస్తుంది, తద్వారా టాలరెన్స్ మరియు రిలెవెన్స్‌ మధ్య సమతుల్యతను సాధిస్తుంది.

పనితీరు మరియు ఫాల్‌బ్యాక్ లాజిక్ (Performance and fallback logic)

సెర్చ్ రూటీన్ OpenSearch కాల్‌ను try-catch బ్లాక్‌లో ఉంచుతుంది:

  • OpenSearch 400 ms లోపు ఫలితాలను ఇస్తే, ఆ ఫలితాలు ప్రదర్శించబడతాయి.
  • ఒకవేళ కాల్ ఎక్సెప్షన్‌ను (exception) త్రో చేసినా లేదా టైమ్ అవుట్ అయినా, సిస్టమ్ వెంటనే SQLite FTS5తో క్వెరీని మళ్ళీ రన్ చేస్తుంది.

దీనివల్ల నెట్‌వర్క్ లేటెన్సీ లేదా సర్వీస్ అంతరాయాలు వినియోగదారు అనుభవాన్ని దెబ్బతీయవు. సెర్చ్ లేటెన్సీ 20 ms కంటే తక్కువగానే ఉంది.

కొలవదగిన ప్రభావం (Measurable impact)

  • లాటిన్-స్క్రిప్ట్ క్వెరీల కోసం సున్నా-ఫలితాల రేట్లు (Zero-result rates) 11.4% నుండి **2.1%**కి తగ్గాయి.
  • CJK క్వెరీల కోసం సెర్చ్ నాణ్యత మారలేదు, దీనివల్ల కొత్త CJK అనలైజర్ అసలు FTS5 ఇండెక్స్ యొక్క బలాన్ని కాపాడిందని నిర్ధారించబడింది.
  • ఎండ్-టు-ఎండ్ లేటెన్సీ సులభంగా 20 ms లక్ష్యం కంటే తక్కువగానే ఉంది, అంటే జోడించిన లేయర్ UIని నెమ్మదింపజేయలేదు.

పాఠాలు మరియు బేరసారాలు (Lessons and trade-offs)

  • విడివిడి ఫోల్డింగ్ మరియు ఫజినెస్ (Separate folding and fuzziness) – ఫోల్డింగ్ (అక్షరాలను నార్మలైజ్ చేయడం) మరియు ఫజినెస్ (టైపోలను హ్యాండిల్ చేయడం) వేర్వేరు సమస్యలను పరిష్కరిస్తాయి. వాటిని విడివిడి ఫీల్డ్‌లలో ఉంచడం వల్ల అనుకోని పరస్పర చర్యలను (unintended interactions) నివారించవచ్చు.
  • సెర్చ్ ఇండెక్స్‌ను మూల సమాచారంగా (source of truth) పరిగణించవద్దు – SQLite అనేది ప్రధాన స్టోరేజ్ (canonical store); OpenSearch అనేది దాని నుండి తీసుకోబడిన, రిఫ్రెష్ చేయదగిన వ్యూ (view). ఇది ఇండెక్స్ డ్రిఫ్ట్‌ను నివారిస్తుంది మరియు వైఫల్యాల తర్వాత రికవరీని సులభతరం చేస్తుంది.
  • బూస్ట్ టియర్స్ ట్యూనింగ్‌ను సులభతరం చేస్తాయి – సంబంధిత మ్యాచీస్‌ను ఒకే బూస్ట్ ఫ్యాక్టర్‌ కింద గ్రూప్ చేయడం వల్ల సర్దుబాటు చేయవలసిన పారామీటర్ల సంఖ్య తగ్గుతుంది.

తదుపరి గమనించవలసినవి

SQLite FTS5 యొక్క నిరూపితమైన CJK సామర్థ్యాలను కోల్పోకుండానే, ఒక చిన్న OpenSearch లేయర్ బహుభాషా వీడియో శీర్షికల కోసం టైపో టాలరెన్స్‌ను గణనీయంగా మెరుగుపరచగలదని ఈ ప్రయోగం నిరూపిస్తుంది. సెర్చ్ రిలెవెన్స్ నేరుగా వాచ్ టైమ్‌ను ప్రభావితం చేసే ప్లాట్‌ఫారమ్‌ల కోసం, ఆ మెరుగుదల ఒక స్పష్టమైన యూజర్-ఎక్స్‌పీరియన్స్ విజయంలా మారుతుంది.