الإنترفيو بيبدأ بالمطلوب مش باسم الأداة
عندك عشر مليون منتج. المنتج والأوردر والمخزون والدفع قاعدين في SQL. البزنس عايز سيرش اليوزر يقدر يعيش بيه:
SQL ممتازة لما بتدور على حاجة معروفة
رقم أوردر، إيميل، SKU، رقم فاتورة. دي قيم معروفة، ولو عملت index صح على العمود، Postgres و SQL Server بيرجعوا الصف بسرعة. مش بتقارن “أنهي نتيجة أحسن”. يا الصف ده يا لأ.
WHERE sku = 'APL-IP15P-256'. الـ index بيوصّلك للصف. عشرين مليون صف مش مشكلة لو الشرط ده.
جملة ناقصة، غلطة إملائي، ترتيب بالنِيّة، أعداد جنب الفلاتر. هنا SQL لسه موجودة، بس مش هي أداة البحث.
LIKE بيبدأ كويس وبعدين الأسئلة بتخلص
في أول نسخة من المتجر ممكن تكتب:
SELECT id, nameFROM productsWHERE name ILIKE '%iphone%' OR description ILIKE '%iphone%';
على كام ألف منتج ممكن تعدّي. % في أول الكلمة غالبًا بتلغي فايدة الـ B-tree index، فالداتابيز بتمسح صفوف كتير. ولسه متجاوبتش على الأسئلة اللي اليوزر حاسس بيها:
- ظهور الكلمة في
nameأهم من ظهورها فيdescription؟ - الكفر “compatible with iPhone 15 Pro” ليه طالع فوق الموبايل نفسه؟
ifoneيرجّع ولا يقول مفيش نتائج؟- عدد المنتجات لكل brand، والاقتراحات وأنت بتكتب، ومقطع الـ description اللي فيه الماتش؟
Postgres عنده full-text search (tsvector) وده أحسن من LIKE بكتير للبحث بالنص. الأداة مش هي الحكم. الحكم: هل محتاج ranking و typos و facets و autocomplete على تجربة بحث أساسية، ولا لأ.
باب البحث غير باب البيزنس
حتى لو ركّبت Elasticsearch، الـ SQL مش بتمشي. الأوردر والفلوس والعلاقات والـ constraints محتاجين transactions. الداتابيز بتفضل source of truth. Elasticsearch بيبقى search index: نسخة متشكّلة عشان البحث، مش عشان تتحاسب منها.
- اليوزر ← Express: بحث أو شراء
- Express ← اليوزر: الرد
- Express ← Elasticsearch: search
- Express ← SQL: transaction
اليوزر مش بيعرف الفرق. الـ API هو اللي بيفرق: صفحة النتائج تسأل Elasticsearch، والـ checkout يسأل SQL. المخزون اللي اتخصم لحظة الدفع بيتقرأ من SQL، حتى لو سيرش من ثواني كان لسه كاتب “متوفر”.
🧪 Lab
اكتب لتلات شاشات في المتجر: البحث هيروح فين؟
- خانة البحث في الصفحة الرئيسية.
- شاشة الدعم اللي بتلصق فيها رقم الأوردر.
- تقرير “كل منتجات Apple تحت ٢٠ ألف” جوه لوحة الأدمن، من غير ترتيب بالنِيّة.
الأولى محرك بحث لو التجربة محتاجة ranking و typos. التانية SQL بإندكس على رقم الأوردر. التالتة غالبًا SQL كمان: الفلاتر معروفة ومفيش نص حر. القرار مش “عندنا كام صف”.