
تصور کن تو یه اپ مثل Uber Eats هستی، گرسنهات هست و دنبال یه پیتزای وگان خوشمزه تو استانبول میگردی. یا تو یه تاکسی آنلاین مثل اسنپ، میخوای یه راننده نزدیک پیدا کنی که تو ترافیک گیر نیفته. حالا یه فروشگاه آنلاین مثل دیجیکالا رو در نظر بگیر که میخوای یه گوشی با یه بودجه خاص پیدا کنی. تو این سرویسها، جستجو قلب تپندهی سیستمه. اگه درست کار نکنه، کاربر یه ثانیه صبر نمیکنه و میره سراغ رقیب! تو این مقاله، که اولین قسمت از یه سری چندقسمتیه، میخوام ساده و عامیانه درباره اهمیت جستجو تو سرویسهای پرترافیک(مثل سفارش تاکسی، غذا و فروشگاههای آنلاین) حرف بزنم، چالشهاش رو باز کنم و یه نگاه کلی به ابزارهای مرتبط بندازم.
جستجو تو سرویسهای پرترافیک مثل Uber، Uber Eats یا Amazon فقط پیدا کردن یه چیزی نیست، یه تجربه کامل برای کاربره و این مورد اهمیت خیلی بالایی داره.
در واقع جستجو یه فرآیند اطلاعاتیه که باید کاربر رو سریع و دقیق به هدفش برسونه.
مثلاً تو اوبر یا اسنپ، وقتی آدرس میزنی، سیستم باید موقعیتت رو با GPS چک کنه، رانندههای نزدیک رو پیدا کنه، ترافیک و حتی فیلترها و اولویت های تو رو (مثل ماشین لوکس یا اقتصادی) در نظر بگیره و در کمتر از یه ثانیه جواب بده. خب اینجا یه تأخیر کوچیک داشته باشیم چی میشه؟ واضحا کاربر میره سراغ رقیب!
تو سرویسهای غذا مثل Uber Eats یا اسنپ فود، جستجو باید میلیونها منو رو اسکن کنه، فیلترهای قیمت، نوع غذا یا فاصله رو اعمال کنه و حتی پیشنهاد شخصی بده. مثلاً اگه قبلاً پیتزا سفارش دادی، سیستم باید بفهمه و پیتزای وگان رو بالاتر نشون بده. از لحاظ رفتار کاربر، کاربرهای امروزی انتظار نتایج "هوشمند" دارن، نه یه لیست ساده، بلکه چیزی که حس کنه برای اونا ساخته شده و حس سفارشی و خاص بودن داشته باشه. تو فروشگاههای آنلاین مثل دیجیکالا،سرویس جستجو باید بین میلیاردها محصول بگرده، نتایج رو بر اساس خریدهای قبلی یا تخفیفها مرتب کنه.(حتی اگر نسخه های پیشرفته تر رو هم در نظر بگیریم باید جستجوی صوتی و پیچیدگی هاش رو هم حساب کنیم)
چرا این موضوع انقدر حائز اهمیت و توجه است؟ چون این سرویسها پر ترافیک یا درخواست هستن (یعنی هر ثانیه هزاران یا حتی میلیونها جستجو دارن).تو همچین سیستمهایی، جستجو باید مقیاسپذیر باشه تا تو پیکهای ترافیک (مثل Black Friday یا تخفیف عید برای فروشگاه ها یا ساعت وعده های غذایی مثل شام و نهار برای Uber Eats و اسنپ و تپسی فود) قفل نکنه. اگر تجربه دیدن دراپ کاربرها در ساعت های خاص رو داشته باشید اهمیت این موضوع رو کامل حس کردید.
جستجو تو این سرویسها کا رچندان ساده ای نیست و پر از چالش هاییه که هر قسمتش پیچیدگی های خاص خودش رو داره. بیایم چندتا از مهمترین هاش رو با هم ببینیم:
حجم عظیم دادهها:
تو Uber Eats، سیستم باید میلیونها آیتم منو، رستوران و نظرات رو ایندکس کنه. تو Amazon، میلیاردها محصول با ویژگیهای مختلف (قیمت، برند، تخفیف) هست. در معماری اطلاعات چالش اصلی اینه که باید یه ایندکس سریع بسازی که دادههای بزرگ رو سریع اسکن کنه.به عنوان نمونه، تو اسنپ و تپسی، جستجو باید موقعیت رانندهها رو که هر ثانیه تغییر میکنه، تو یه نقشه عظیم جغرافیایی پیدا کنه.
نیاز به دیتای لحظه ای (Real-Time):
پر واضحه که دادهها باید بهروز باشن. مثلاً تو تپسی یا اسنپ فود، اگه رستورانی بستهست یا موجودی یه غذا تموم شده، نباید تو نتایج بیاد. مخصوصا در ساعت های پیک (زمان هایی که ریکوئست زیاد هست مثل ناهار) رستوران وقتی در لحظه درخواست اتمام موجودی یا بسته بودن رو میزنه باید در کسری از ثانیه ثبت بشه تا کاربر غذا رو سفارش نده و در ادامه وارد مسیرهای برگشت وجه نشه. در واقع این نیاز به "near-real-time indexing" داره که خیلی پیچیدهست.همچین نمونه ای رو توی داکیومنت الستیک سرچ میتونیم بخونیم و بعدا هم میریم سراغش.
اگر بخواییم دوباره از اسنپ و تپسی مثال بزنیم، اگه موقعیت راننده ۱۰ ثانیه پیش آپدیت شده باشه، ممکنه دیگه درست نباشه و مسیرش به طور کلی تغییر کرده باشه.
شخصیسازی و دقت:
کاربرا انتظار دارن نتایج به اونا ربط داشته باشه. جستجو باید رفتار کاربر (مثل خریدهای قبلی) و مواردی زمینه ای (مثل مکان یا ساعت) رو در نظر بگیره. این موضوع زمان میتونه برای Q-commerce ها جذابیت داشته باشه که محصولات تاریخ انقضا و در زمان های مشخصی ممکن مصرف بشن. موقع خرید "لپ تاپ" تو دیجیکالا، سیستم بر اساس تاریخچه ممکنه مدلهای گیمینگ رو بالاتر بیاره یا حتی بر اساس سبد خرید های قبلی شاید حدس بزنه که گزینه های اقتصادی رو در اول لیست پیشنهاد بده.
تنوع دادهها:
جستجو باید با دادههای چندزبانه، جغرافیایی و حتی صوتی کار کنه. سرچ در سرویس های سفارش غذای آنلاین، کاربر ممکنه با فارسی، انگلیسی یا حتی لهجههای محلی جستجو کنه. نمونه خیلی معروفش برای ما تفاوت حروف عربی و فارسی در سرچ یک کلمه مشخص یا تلفظهای مختلف یا کلمات مترادف (مثل "پیتزا" و "پیتسا") که سیستم باید بتونه درست تشخیص بده.
مقیاسپذیری تو پیک ترافیک:
تو زمانهای شلوغ (مثل ساعت ۸ شب برای غذا یا تخفیفهای ویژه فروشگاه آنلاین)، تعداد درخواستها میتونه ۱۰ برابر بشه.سیستم باید برای این پیکها آماده باشه. تو کمپین های فروش و ایونت های مختلف باید میلیونها جستجو رو تو زمان خیلی کوتاهی هندل کنه مخصوصا اگر کالای خاصی به عنوان کالای هدف برای گروه های مشتری در نظر گرفته شده باشه.
برای حل این چالشها، سرویسهای با ترافیک بالا از ابزارهای خاصی استفاده میکنن. تو این قسمت، فقط یه معرفی کوتاه میکنیم (قسمتهای بعدی عمیقتر میشن):
یک کتابخونه جاوا برای ایندکس کردن و جستجوی متنی است. Lucene پایه بسیاری از سیستمهای جستجوی مدرن محسوب میشه چون:
سرعت ایندکس کردن بالایی داره
از کوئریهای پیچیده پشتیبانی میکنه
قابلیت جستجوی فازی (Fuzzy Search) و پردازش زبان طبیعی داره
Uber از Lucene برای ایندکس کردن موقعیت رانندهها استفاده میکنه.
یک موتور جستجوی توزیعشده بر پایه Lucene که برای دادههای بزرگ طراحی شده. قابلیتهای کلیدی این سرویس شامل:
پشتیبانی از جستجوی لحظه ای (Real-time)
قابلیت مقیاسپذیری افقی
پشتیبانی از جستجوهای مکانی (Geo-search)
Uber Eats از Elasticsearch برای جستجوی رستورانها تو مناطق خاص استفاده کرد.
یک فورک از Elasticsearch که متنبازتر است و جامعه توسعهدهنده قویتری داره. از مزایاش میشه گفت:
سازگاری کامل با Elasticsearch
انعطافپذیری بیشتر در سفارشیسازی
مناسب برای سرویسهای پرترافیک
Uber Eats به OpenSearch مهاجرت کرد تا جستجوی real-time رو بهتر کنه.
این مقاله فقط یه مقدمه بود. تو قسمتهای بعدی، عمیقتر میریم تو جزئیات.
منابع اصلی:
Information Architecture: For the Web and Beyond (فصل Search Systems) – برای اصول پایه جستجو.
Designing the Search Experience (بخش User Behavior) – برای رفتار کاربر و طراحی تجربه.
The Art of Scalability (فصل Architecture for Scalability) – برای مقیاسپذیری سیستمها