ಒಂದು ಡೆವಲಪರ್ ತಂಡವು OpenSearch ಅನ್ನು SQLite FTS5 ನೊಂದಿಗೆ ಜೋಡಿಸಿ, ಶೂನ್ಯ-ಫಲಿತ (zero-result) ವಿಡಿಯೋ ಹುಡುಕಾಟಗಳನ್ನು 11.4 ಪ್ರತಿಶತದಿಂದ 2.1 ಪ್ರತಿಶತಕ್ಕೆ ಇಳಿಸಿತು, ಹಾಗೆಯೇ ವಿಳಂಬವನ್ನು (latency) 20 ms ಗಿಂತ ಕಡಿಮೆ ಇರಿಸಿತು. ಈಗ ಬಳಕೆದಾರರು “blackpink jenny solo stag” ಎಂದು ಟೈಪ್ ಮಾಡಿದರೆ, ಖಾಲಿ ಪಟ್ಟಿಯ ಬದಲಿಗೆ ಸರಿಯಾದ “BLACKPINK Jennie SOLO stage” ಫಲಿತಾಂಶವನ್ನು ನೋಡುತ್ತಾರೆ.

ಈ ಬದಲಾವಣೆ ಏಕೆ ಅಗತ್ಯವಾಗಿತ್ತು

ವಿಡಿಯೋ-ಹೋಸ್ಟಿಂಗ್ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್‌ನ ಸರ್ಚ್ ಲಾಗ್‌ಗಳು ಒಂದು ಪುನರಾವರ್ತಿತ ಸಮಸ್ಯೆಯನ್ನು ತೋರಿಸಿದವು: ಲ್ಯಾಟಿನ್-ಸ್ಕ್ರಿಪ್ಟ್ (Latin-script) ಶೀರ್ಷಿಕೆಯಲ್ಲಿನ ಒಂದು ಸಣ್ಣ ಕಾಗುಣಿತ ದೋಷವು (typo) ಎಲ್ಲಾ ಫಲಿತಾಂಶಗಳನ್ನು ಅಳಿಸಿಹಾಕುತ್ತಿತ್ತು. ಚೀನೀ, ಜಪಾನೀಸ್ ಮತ್ತು ಕೊರಿಯನ್ (CJK) ಪಠ್ಯದಲ್ಲಿ ಸಬ್‌ಸ್ಟ್ರಿಂಗ್‌ಗಳನ್ನು (substrings) ಹೊಂದಿಸಲು ಇರುವ ಸಾಮರ್ಥ್ಯಕ್ಕಾಗಿ ಪ್ರಶಂಸಿಸಲ್ಪಟ್ಟ SQLite ನ FTS5 ಎಕ್ಸ್‌ಟೆನ್ಶನ್, ಫಜಿ ಮ್ಯಾಚಿಂಗ್ (fuzzy matching) ಅನ್ನು ಮಾಡುವುದಿಲ್ಲ. ಹೆಸರು ಅಥವಾ ಹಾಡಿನ ಶೀರ್ಷಿಕೆಯಲ್ಲಿನ ಒಂದು ತಪ್ಪಾದ ಅಕ್ಷರವು ಕ್ವೇರಿಯನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಹಾಳುಮಾಡುತ್ತದೆ.

ಅಸ್ತಿತ್ವದಲ್ಲಿದ್ದ ಪೈಪ್‌ಲೈನ್ SQLite ಅನ್ನು ಏಕೈಕ ಇಂಡೆಕ್ಸ್ ಆಗಿ ಪರಿಗಣಿಸುತ್ತಿತ್ತು. ಇದು CJK ಕ್ವೇರಿಗಳನ್ನು ಚೆನ್ನಾಗಿ ನಿರ್ವಹಿಸುತ್ತಿತ್ತು ಆದರೆ ಲ್ಯಾಟಿನ್-ಸ್ಕ್ರಿಪ್ಟ್ ಕಾಗುಣಿತ ದೋಷಗಳಿಗೆ ಯಾವುದೇ ಸುರಕ್ಷತಾ ಜಾಲವನ್ನು (safety net) ಒದಗಿಸಿರಲಿಲ್ಲ. ಆದ್ದರಿಂದ, ತಂಡವು ಈಗಾಗಲೇ ಸಾಬೀತಾದ FTS5 ಲೇಯರ್ ಅನ್ನು ಕೈಬಿಡದೆ, ಕಾಗುಣಿತ ದೋಷಗಳನ್ನು ಸಹಿಸಿಕೊಳ್ಳಬಲ್ಲ (typo tolerance) ಪೂರಕ ಸರ್ಚ್ ಇಂಜಿನ್ ಅನ್ನು ಹುಡುಕಿತು.

OpenSearch ಅನ್ನು ಹೇಗೆ ಸೇರಿಸಲಾಯಿತು

OpenSearch ಮುಂಚೂಣಿಯ ಸರ್ಚ್ ಸೇವೆಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ; SQLite ಮೂಲ ಸತ್ಯದ ಮೂಲವಾಗಿ (source of truth) ಉಳಿಯುತ್ತದೆ. ಈ ಎರಡು ವ್ಯವಸ್ಥೆಗಳು ಸಮಾಂತರವಾಗಿ ಚಲಿಸುತ್ತವೆ: ಮೊದಲು OpenSearch ಬಳಕೆದಾರರ ಕ್ವೇರಿಯನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ ಮತ್ತು ಅದು ಸಾಕಷ್ಟು ವೇಗವಾಗಿ ಪ್ರತಿಕ್ರಿಯಿಸಿದರೆ, ಅದರ ಫಲಿತಾಂಶಗಳನ್ನು ತೋರಿಸಲಾಗುತ್ತದೆ. ಒಂದು ವೇಳೆ OpenSearch ಟೈಮ್‌ಔಟ್ ಆಗಿದ್ದರೆ ಅಥವಾ ದೋಷ ಉಂಟಾದರೆ, ವಿನಂತಿಯು SQLite FTS5 ಇಂಡೆಕ್ಸ್‌ನತ್ತ ಸಾಗುತ್ತದೆ. ಈ “ಫೇಲ್-ಸೇಫ್” (fail-safe) ವಿನ್ಯಾಸವು ನೆಟ್‌ವರ್ಕ್ ಅಡಚಣೆಯಿಂದಾಗಿ ಸರ್ಚ್ ಬಾರ್ ಎಂದಿಗೂ ಖಾಲಿ ಉಳಿಯದಂತೆ ಖಚಿತಪಡಿಸುತ್ತದೆ.

ಮಲ್ಟಿ-ಫೀಲ್ಡ್ ಮ್ಯಾಪಿಂಗ್

OpenSearch ನಲ್ಲಿ ಪ್ರತಿಯೊಂದು ವಿಡಿಯೋ ಶೀರ್ಷಿಕೆಯನ್ನು ಮೂರು ರೀತಿಯಲ್ಲಿ ಇಂಡೆಕ್ಸ್ ಮಾಡಲಾಗುತ್ತದೆ:

  • title.std – ASCII folding ನೊಂದಿಗೆ ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಅನಲೈಸರ್ ಮೂಲಕ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲಾಗುತ್ತದೆ. ಇದು ಅಕ್ಸೆಂಟೆಡ್ ಅಕ್ಷರಗಳನ್ನು (accented characters) ನಾರ್ಮಲೈಸ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಹೆಚ್ಚಿನ ಲ್ಯಾಟಿನ್-ಸ್ಕ್ರಿಪ್ಟ್ ಕಾಗುಣಿತ ದೋಷಗಳನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ.
  • title.cjk – ಬಿಗ್ರಾಂಸ್‌ಗಳನ್ನು (bigrams - ಎರಡು ಅಕ್ಷರಗಳ ಟೋಕನ್‌ಗಳು) ರಚಿಸುವ CJK ಅನಲೈಸರ್ ಮೂಲಕ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲಾಗುತ್ತದೆ. ಇದು ಏಷ್ಯನ್ ಸ್ಕ್ರಿಪ್ಟ್‌ಗಳಿಗಾಗಿ FTS5 ಒದಗಿಸುವ ಸಬ್‌ಸ್ಟ್ರಿಂಗ್-ಮ್ಯಾಚಿಂಗ್ ಸಾಮರ್ಥ್ಯವನ್ನು ಉಳಿಸಿಕೊಳ್ಳುತ್ತದೆ.
  • title.keyword – ನಿಖರವಾದ ಮ್ಯಾಚ್-ಲುಕ್‌ಅಪ್ ಮತ್ತು ಸಾರ್ಟಿಂಗ್‌ಗಾಗಿ ಬದಲಾಯಿಸದೆ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ.

ಪ್ರತ್ಯೇಕ ಫೀಲ್ಡ್‌ಗಳು ಟೋಕನೈಸೇಶನ್ ತಂತ್ರಗಳನ್ನು ಬೆರೆಸದೆ, ಪ್ರತಿಯೊಂದು ಸ್ಕ್ರಿಪ್ಟ್‌ಗೆ ಸರಿಯಾದ ವಿಶ್ಲೇಷಣೆಯನ್ನು ಅನ್ವಯಿಸಲು ಕ್ವೇರಿಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತವೆ.

ಬೂಸ್ಟ್ ಟಿಯರ್ಸ್

ಒಂದೇ ದೊಡ್ಡ ಕ್ವೇರಿಯ ಬದಲಿಗೆ, ತಂಡವು ಫಲಿತಾಂಶಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ರ‍್ಯಾಂಕ್ ಮಾಡುವ ಟಿಯರ್ಡ್ ಕ್ವೇರಿಯನ್ನು ನಿರ್ಮಿಸಿತು:

  1. title.keyword ನಲ್ಲಿನ ನಿಖರವಾದ ಫ್ರೇಸ್ ಮ್ಯಾಚ್‌ಗಳಿಗೆ (Exact phrase matches) ಅತಿ ಹೆಚ್ಚು ಬೂಸ್ಟ್ ನೀಡಲಾಗುತ್ತದೆ, ಇದರಿಂದಾಗಿ ಪರ್ಫೆಕ್ಟ್ ಮ್ಯಾಚ್‌ಗಳು ಪಟ್ಟಿಯಲ್ಲಿ ಅಗ್ರದಲ್ಲಿರುತ್ತವೆ.
  2. title.cjk ನಲ್ಲಿನ CJK ಬಿಗ್ರಾಂ ಮ್ಯಾಚ್‌ಗಳಿಗೆ ಮಧ್ಯಮ ಬೂಸ್ಟ್ ನೀಡಲಾಗುತ್ತದೆ, ಇದು ಏಷ್ಯನ್ ಭಾಷೆಯ ಹುಡುಕಾಟದ ಗುಣಮಟ್ಟವನ್ನು ಕಾಪಾಡುತ್ತದೆ.
  3. title.std ನಲ್ಲಿನ ಫಜಿ ಲ್ಯಾಟಿನ್ ಮ್ಯಾಚ್‌ಗಳಿಗೆ ಕಡಿಮೆ ಬೂಸ್ಟ್ ನೀಡಲಾಗುತ್ತದೆ, ಇದರಿಂದಾಗಿ ನಿಖರವಾದ ಫಲಿತಾಂಶಗಳಿಗೆ ಅಡ್ಡಿಯಾಗದಂತೆ ಕಾಗುಣಿತ ದೋಷ ಸಹಿಸಿಕೊಳ್ಳುವ ಫಲಿತಾಂಶಗಳು ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತವೆ.

ಈ ಟಿಯರ್ಡ್ ವಿಧಾನವು ಟ್ಯೂನಿಂಗ್ ಅನ್ನು ಸರಳಗೊಳಿಸುತ್ತದೆ: ಒಂದು ಬೂಸ್ಟ್ ಮೌಲ್ಯವನ್ನು ಹೊಂದಿಸುವುದರಿಂದ ಇಡೀ ಮ್ಯಾಚ್ ವರ್ಗದ ಸಾಪೇಕ್ಷ ಪ್ರಾಮುಖ್ಯತೆಯನ್ನು ಬದಲಾಯಿಸಬಹುದು.

ಸ್ಮಾರ್ಟ್ ಫಜಿનેસ

ಫಜಿનેસ (Fuzziness)—ಅಂದರೆ ಸೀಮಿತ ಸಂಖ್ಯೆಯ ಅಕ್ಷರಗಳ ಬದಲಾವಣೆಗಳನ್ನು ಅನುಮತಿಸುವುದು—ಲ್ಯಾಟಿನ್ ಫೀಲ್ಡ್‌ಗೆ ಮಾತ್ರ ಅನ್ವಯಿಸುತ್ತದೆ. CJK ನಲ್ಲಿ ಒಂದು ಅಕ್ಷರ ಬದಲಾವಣೆಯು ಅರ್ಥವನ್ನೇ ಸಂಪೂರ್ಣವಾಗಿ ಬದಲಾಯಿಸುವುದರಿಂದ ತಂಡವು title.cjk ಗಾಗಿ ಫಜಿનેસ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿತು. ಲ್ಯಾಟಿನ್ ಪಠ್ಯಕ್ಕಾಗಿ ಕ್ವೇರಿಯು OpenSearch ನ AUTO ಫಜಿનેસ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಬಳಸುತ್ತದೆ, ಇದು ಪದದ ಉದ್ದಕ್ಕೆ ಅನುಗುಣವಾಗಿ ಅನುಮತಿಸಲಾದ ಎಡಿಟ್ ಡಿಸ್ಟೆನ್ಸ್ ಅನ್ನು ಸ್ಕೇಲ್ ಮಾಡುತ್ತದೆ, ಇದರಿಂದ ಸಹಿಷ್ಣುತೆ ಮತ್ತು ಪ್ರಸ್ತುತಿಯ ನಡುವೆ ಸಮತೋಲನವನ್ನು ಸಾಧಿಸುತ್ತದೆ.

ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಫಾಲ್‌ಬ್ಯಾಕ್ ಲಾಜಿಕ್

ಸರ್ಚ್ ರೂಟೀನ್ OpenSearch ಕರl ಅನ್ನು try-catch ಬ್ಲಾಕ್‌ನಲ್ಲಿ ಸುತ್ತುವರಿಯುತ್ತದೆ:

  • OpenSearch 400 ms ಒಳಗೆ ಪ್ರತಿಕ್ರಿಯಿಸಿದರೆ, ಅದರ ಫಲಿತಾಂಶಗಳನ್ನು ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತದೆ.
  • ಒಂದು ವೇಳೆ ಕರೆಯು ಎಕ್ಸೆಪ್ಶನ್ (exception) ಎಸೆಯುತ್ತಿದ್ದರೆ ಅಥವಾ ಟೈಮ್‌ಔಟ್ ಮೀರಿದರೆ, ಸಿಸ್ಟಮ್ ತಕ್ಷಣವೇ SQLite FTS5 ವಿರುದ್ಧ ಕ್ವೇರಿಯನ್ನು ಮರು ಚಲಾಯಿಸುತ್ತದೆ.

ಇದು ನೆಟ್‌ವರ್ಕ್ ವಿಳಂಬ ಅಥವಾ ಸೇವೆಗಳ ಸ್ಥಗಿತವು ಬಳಕೆದಾರರ ಅನುಭವವನ್ನು ಎಂದಿಗೂ ಕುಗ್ಗಿಸದಂತೆ ನೋಡಿಕೊಳ್ಳುತ್ತದೆ. ಸರ್ಚ್ ವಿಳಂಬವು (Search latency) 20 ms ಗಿಂತ ಕಡಿಮೆ ಇತ್ತು.

ಅಳೆಯಬಹುದಾದ ಪ್ರಭಾವ

  • ಲ್ಯಾಟಿನ್-ಸ್ಕ್ರಿಪ್ಟ್ ಕ್ವೇರಿಗಳಿಗಾಗಿ ಶೂನ್ಯ-ಫಲಿತ ದರಗಳು 11.4 % ರಿಂದ 2.1 % ಕ್ಕೆ ಇಳಿದವು.
  • CJK ಕ್ವೇರಿಗಳಿಗಾಗಿ ಸರ್ಚ್ ಗುಣಮಟ್ಟವು ಬದಲಾಗದೆ ಉಳಿದಿದೆ, ಇದು ಹೊಸ CJK ಅನಲೈಸರ್ ಮೂಲ FTS5 ಇಂಡೆಕ್ಸ್‌ನ ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಉಳಿಸಿಕೊಂಡಿದೆ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ.
  • ಎಂಡ್-ಟು-ಎಂಡ್ ವಿಳಂಬವು (End-to-end latency) ಸುಲಭವಾಗಿ 20 ms ಗುರಿಗಿಂತ ಕೆಳಗಿದೆ, ಅಂದರೆ ಸೇರಿಸಲಾದ ಲೇಯರ್ UI ಅನ್ನು ನಿಧಾನಗೊಳಿಸಿಲ್ಲ.

ಪಾಠಗಳು ಮತ್ತು ವಹಿವಾಟುಗಳು

  • ಪ್ರತ್ಯೇಕ ಫೋಲ್ಡಿಂಗ್ ಮತ್ತು ಫಜಿનેસ – ಫೋಲ್ಡಿಂಗ್ (ಅಕ್ಷರಗಳನ್ನು ನಾರ್ಮಲೈಸ್ ಮಾಡುವುದು) ಮತ್ತು ಫಜಿનેસ (ಕಾಗುಣಿತ ದೋಷಗಳನ್ನು ನಿರ್ವಹಿಸುವುದು) ವಿಭಿನ್ನ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸುತ್ತವೆ. ಇವುಗಳನ್ನು ಪ್ರತ್ಯೇಕ ಫೀಲ್ಡ್‌ಗಳಲ್ಲಿ ಇರಿಸುವುದರಿಂದ ಅನಿರೀಕ್ಷಿತ ಪರಿಣಾಮಗಳನ್ನು ತಪ್ಪಿಸಬಹುದು.
  • ಸರ್ಚ್ ಇಂಡೆಕ್ಸ್ ಅನ್ನು ಮೂಲ ಸತ್ಯದ ಮೂಲವಾಗಿ (source of truth) ಪರಿಗಣಿಸಬೇಡಿ – SQLite ಮೂಲ ಶೇಖರಣೆಯಾಗಿ (canonical store) ಉಳಿಯುತ್ತದೆ; OpenSearch ಒಂದು ಉತ್ಪನ್ನ ಮತ್ತು ರಿಫ್ರೆಶ್ ಮಾಡಬಹುದಾದ ವ್ಯೂ (view). ಇದು ಇಂಡೆಕ್ಸ್ ಡ್ರಿಫ್ಟ್ ಅನ್ನು ತಡೆಯುತ್ತದೆ ಮತ್ತು ವೈಫಲ್ಯಗಳ ನಂತರ ಚೇತರಿಕೆಯನ್ನು ಸರಳಗೊಳಿಸುತ್ತದೆ.
  • ಬೂಸ್ಟ್ ಟಿಯರ್ಸ್ ಟ್ಯೂನಿಂಗ್ ಅನ್ನು ಸರಳಗೊಳಿಸುತ್ತದೆ – ಸಂಬಂಧಿತ ಮ್ಯಾಚ್‌ಗಳನ್ನು ಒಂದೇ ಬೂಸ್ಟ್ ಫ್ಯಾಕ್ಟರ್ ಅಡಿಯಲ್ಲಿ ಗುಂಪು ಮಾಡುವುದರಿಂದ ಹೊಂದಿಸಬೇಕಾದ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳ ಸಂಖ್ಯೆ ಕಡಿಮೆಯಾಗುತ್ತದೆ.

ಮುಂದೆ ಗಮನಿಸಬೇಕಾದವುಗಳು

ಈ ಪ್ರಯೋಗವು ಸಾಬೀತುಪಡಿಸುವುದೇನೆಂದರೆ, SQLite FTS5 ನ ಸಾಬೀತಾದ CJK ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಬಲಿಕೊಡದೆ, ಒಂದು ಸಾಧಾರಣ OpenSearch ಪದರವು ಬಹುಭಾಷಾ ವೀಡಿಯೊ ಶೀರ್ಷಿಕೆಗಳಿಗಾಗಿ ತಪ್ಪು ಕಾಗುಣಿತಗಳ ಸಹಿಷ್ಣುತೆಯನ್ನು ಗಮನಾರ್ಹವಾಗಿ ಸುಧಾರಿಸಬಲ್ಲದು. ಹುಡುಕಾಟದ ಪ್ರಸ್ತುತತೆಯು ನೇರವಾಗಿ ವೀಕ್ಷಣಾ ಸಮಯದ ಮೇಲೆ ಪ್ರಭಾವ ಬೀರುವ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್‌ಗಳಿಗೆ, ಅಂತಹ ಸುಧಾರಣೆಯು ಬಳಕೆದಾರರ ಅನುಭವದಲ್ಲಿ ಒಂದು ಸ್ಪಷ್ಟವಾದ ಗೆಲುವಾಗಿ ಪರಿಣಮಿಸುತ್ತದೆ.