Google Search Engine ဘယ်လိုအလုပ်လုပ်သလဲ

Search Engine ဆိုတာဘာလဲ နားမလည်တဲ့သူတွေ များနေတာရယ် Computer Science တက်နေတဲ့သူတွေအတွက်ပါ လက်တွေ့ စမ်းရေးကြည့်သင့်တဲ့ project တခုလို့ ယူဆတာရယ်ကြောင့် Search Engine အကြောင်း အကြမ်းဖျင်း ရှင်းပြလိုက်ပါတယ်။

Search Engine ဆိုတာ SELECT * FROM posts; မဟုတ်ပါဘူး။ တော်ကြာ JDBC driver တို့၊ JavaScript တို့သင်ပြီးရင် Search Engine ရေးလို့ရတယ် မှတ်နေမှာစိုးလို့ပါ။ Search Engine တွေထဲမှာ Google ကနာမည်ကြီးတယ်။ သူ့ကို တခုခုမေးလိုက်ရင် ကိုယ့်အိမ်က wifi speed နှေးလို့ ပေါ်မလာသေးတာ ရှိမယ်။ သူက တွေ့နေပြီ။ ဒီ Search Engine ကနောက်ကွယ်မှာ Backend System အကြီးကြီးတခုအနေနဲ့ အလုပ်လုပ်နေတာဖြစ်တယ်။ အလွယ်ပြောရရင်တော့ scraping, processing, indexing နဲ့ querying ဆိုပြီး အဆင့်ဆင့် လုပ်သွားကြတာပါ။

Search Engine pipeline က crawling နဲ့စတယ်လို့ ပြောလို့ရတယ်။ Crawler ဆိုတာက bot ကလေးတွေပေါ့။ Web Page တွေကို request လုပ်မယ်။ ရလာတဲ့ page တွေရဲ့ HTML ကို ဖတ်မယ်။ Google Search မှာ Googlebot လို့ခေါ်တဲ့ အဲဒီလို bot ကလေးတွေ သန်းနဲ့ချီပြီးရှိတယ်။ အဲ bot ကလေးတွေက အင်တာနက်ပေါ်မှာ link တွေရှာမယ်။ ဒီ link တွေကနေ ရလာတဲ့ web page တွေကတဆင့် နောက် link အသစ်တွေ ထပ်ရမယ်။ တွေ့သမျှ link တွေကို request ပြီး content တွေဖတ်မယ်။ ဒါကို crawling လုပ်တာလို့ ခေါ်တယ်။

ဒုတိယက parsing နဲ့ storing ပေါ့။ bot က page တခုရလာပြီဆိုပါတော့။ အဲ page ရဲ့ content က parser တွေကို ဖြတ်ရပါတယ်။ ဒီ parser တွေရဲ့ တာဝန်က HTML တို့၊ CSS တို့၊ JS တို့ကို ခွဲပလိုက်တာပဲ။ အဓိကက page တခုက ဘာအကြောင်းလဲဆိုတာကို သိရဖို့ title, text, heading နဲ့ဓာတ်ပုံတွေကို ဆွဲထုတ်ရတယ်။ ဒါမှ နှုတ်ခမ်းနီလို့ရှာရင် Chanel တို့ Maybelline တို့ Lancome တို့ပြရမှန်း သိမယ်။ နာနတ်သီးလို့ရှာလိုက်ရင် အော်ဂဲနစ်စိုက်ခင်းထဲက နာနတ်သီးတွေ ပြမယ်ပေါ့။

နံပါတ် ၃ အဆင့်က indexing လို့ခေါ်တယ်။ ရလာတဲ့ content တွေကို database ကြီးတခုထဲ ထည့်သိမ်းလိုက်တာ။ ဒါပေမယ့် database က MySQL တို့၊ Postgres တို့၊ နောက်တခြား columnar တွေလို row အလိုက် column အလိုက် သိမ်းတာ မဟုတ်ဘူး။ inverted index နဲ့သိမ်းတာ။ ဥပမာ dictionary ထဲစာလုံးရှာသလို Onii-chan လို့ရှာရင် ဒီ page ဒီ page ဒီ page တွေရှိမယ်။ Greenday လို့ရှာရင်ကျ ဒီ page ဒီ page တွေဖြစ်မယ်ပေါ့လေ။

နံပါတ်လေးအဆင့်က ranking တဲ့။ ဒါက တကယ်ရှုပ်တယ်။ ဟိုးကတည်းက Machine Learning သုံးလာတဲ့ နေရာ (တခု ဖြတ်ပြောရရင် Google Search Engine က စစချင်းက ML မပါသေးဘူး။ နောက်တော့မှ ထည့်လာတာပါ) ဘယ်လိုမျိုးလဲဆိုတော့ search bar ထဲမှာ ကျွန်တော်တို့က စာလုံးတခုခု ရိုက်ပြီး ရှာလိုက်တယ်ဆိုရင် Search Engine က အဲဒီစာလုံးနဲ့ကိုက်တဲ့ ရှိရှိသမျှ page တွေအကုန် ယူလာပြတာ မဟုတ်ဘူး။

ကိုက်ညီတဲ့ page တွေကို သူက score တွက်ပြီး အများဆုံး ရတဲ့ page တွေကိုမှပြပေးတာ။

keyword နဲ့ကိုက်လား။ ဥပမာ ကိုယ်ရှာလိုက်တဲ့ term က ပိုးမမှီသာဆိုရင် page မှာ ပိုးမမှီသာဆိုတဲ့ စာလုံးပါသလား။

ဘယ်လောက် reliable ဖြစ်လဲ။ domain မတူတဲ့တခြား site တွေက ကိုယ့် site ကိုညွှန်းဖို့ ပြန်ချိတ်ထားကြသလား။

ဘယ်လောက် up to date ဖြစ်လဲ။

UX metrics တွေဘယ်လောက်ကောင်းလဲ။ ဒီ web page က loadup မြန်လား။ mobile friendly ဖြစ်လား။ SEO ဆိုတာ ဒီနေရာမှာ စကားပြောတာပဲ။ Search Engine တွေတိုင်းမှာ သူတို့ သတ်မှတ်ထားတဲ့ content metrics ရှိတယ်။ အဲဒါတွေနဲ့ကိုက်ရင် ကိုယ့် site ကထိပ်ဆုံးက ပြခံရနိုင်ချေ များလေပဲ။

ဒါပြီးရင် Querying ကနောက်ဆုံးအဆင့်။ လူတယောက်က "လန်ဒန်ရဲ့ အကောင်းဆုံး ပီဇာဆိုင်" လို့ရှာလိုက်ရင် querying backend ကအဲဒီ term အရှည်လိုက်ကြီးကို keyword တွေ ခွဲပစ်မယ်။ ဥပမာ လန်ဒန်၊ အကောင်းဆုံး၊ ပီဇာဆိုင် စသဖြင့်။ ပြီးရင် စာလုံးပေါင်းစစ်မယ်။ intent စစ်မယ်။ database ထဲလှမ်းရှာမယ်။ ရလာတဲ့ဟာတွေကို rank စီမယ်။ ပြီးရင် user ဆီပြန်ပို့မယ်။ ဒါတွေအကုန်လုံးကို millisecond လေးအတွင်းမှာ ပြီးအောင် လုပ်နိုင်တယ်။

ဒါလောက်ဆို Search Engine နဲ့ပတ်သက်ပြီး အကြမ်းဖျင်း သဘောပေါက်သွားမယ်ထင်တယ်။

အသေးစိတ် feature တွေက အခု ပြောသွားတာတွေထက် ဒီထက်အများကြီး ထပ်ရှိသေးတာပေါ့။ ဓာတ်ပုံ၊ ဗီဒီယိုတွေကို သပ်သပ် metadata တွေနဲ့ခွဲသိမ်းတာတို့ လူရှာများတဲ့ term တွေဆိုရင် Auto complete လုပ်ပေးတာတို့ နောက် ads တွေအတွက် သပ်သပ် pool တခုမှာ rank စီပေးတာတို့ စသဖြင့် အများကြီး ရှိသေးတယ်။ ကျိန်းသေတာက Search Engine တခုရေးဖို့ JDBC driver နဲ့ JavaScript ရယ်သုံးပြီး SELECT * FROM posts; လောက်နဲ့ မရဘူးဆိုတာပဲ။ ရေးကြည့်ဖို့ စိတ်ဝင်စားရင် အခု ပြောသွားတဲ့ pipeline ထဲက Search Engine Crawler ကစပြီး C++ ဒါမှမဟုတ် Rust သုံးရေးကြည့်ဖို့ အကြံပေးချင်တယ်။