مسئله: در میلیاردها سند، عبارت کاربر را در <200ms پیدا و رتبهبندی کن. دو دنیای جدا: Indexing (آفلاین/نزدیکخط) و Serving (آنلاین داغ).
۱-۳) نیازمندی و طرح
- FR: جستجوی متنی، رتبهبندی مرتبطترین، پیشنهاد/تکمیل خودکار، فیلترها.
- NFR: p99 < 200ms؛ تازگی ایندکس (سند جدید ظرف دقیقهها)؛ مقیاس افقی.
- هسته: Inverted Index — نگاشت هر واژه به لیست سندها (posting list) + وزنها. ساختش: crawl/ingest → پاکسازی و توکنسازی → ایندکسسازی دستهای/استریمی.
DIAGRAMمسیر کوئری
Query
→
Query svc — parse
→
Shard 1
Shard 2
Shard N
→
تجمیع + رتبه
→
نتایج
۴) عمق
- ایندکس Shard میشود (document-based)؛ کوئری به همه Shard ها fan-out و نتایج top-k ادغام میشود — تأخیر = کندترین Shard، پس replica و hedge request.
- رتبه دو مرحلهای: بازیابی ارزان (BM25) → رتبهبندی گران ML فقط روی چند صد کاندید.
- تکمیل خودکار: مسئله جدا — Trie/ایندکس پیشوندی از کوئریهای محبوب، آپدیت دورهای، کش تهاجمی.
- تازگی: ایندکس اصلیِ دورهای + ایندکس کوچک لحظهای (delta) که در serving ادغام میشود.
- کش نتایج: کوئریهای سر (head queries) سهم بزرگی از ترافیک دارند — کش کوتاهعمرشان طلاست.
به زبان ساده
موتور جستجو یعنی دو دنیا: خزش و ساخت ایندکس معکوس (آفلاین) و سرو کوئری در چند میلیثانیه (آنلاین) — واژه → فهرست سندها.
مثال واقعی
ایندکس معکوس مثل فهرست آخر کتاب است: بهجای خواندن کل کتاب برای یافتن «تهران»، مستقیم میبینی کدام صفحهها این واژه را دارند.