Elasticsearch Search Platform؛ مهندسی جستوجو و relevance
یک پلتفرم جستوجوی مبتنی بر Elasticsearch 8.15.3 و Django REST Framework که طراحی index، تحلیل متن، relevance، fuzzy matching، facets، pagination و explainability را بهعنوان مسئله اصلی مهندسی میکند.
زمینه
یک search API واقعی فقط اجرای match query نیست. کیفیت جستوجو به طراحی index، تحلیل متن، relevance، filtering، sorting، pagination و امکان توضیح نتیجه وابسته است. این پروژه یک پلتفرم قابل بررسی برای همین مسائل ساخته است.
مسئله
هدف، ساخت یک API جستوجو بود که بتواند درخواستهای ترکیبی را با رفتار قابل پیشبینی پاسخ دهد: جستوجوی متنی با boost، فیلتر بدون اثرگذاری بر score، مرتبسازی پایدار، pagination در مقیاس نتایج و در صورت نیاز facet و توضیح score.
محدودیتها و الزامات
- تفکیک منطق domain از Django و Elasticsearch
- پشتیبانی از relevance و field boosts بهصورت قابل تنظیم
- فیلترهای ترکیبی بدون تغییر ناخواسته score
- pagination پایدار با tie-breaker و search_after
- ارائه explainability برای فهم چرایی امتیازدهی
- قابلیت آزمون معماری dependency rules و رفتار API
رویکرد
معماری پروژه به لایههای Domain، Application، Infrastructure و Presentation تقسیم شده است. Elasticsearch فقط در adapterهای زیرساختی قرار دارد و use caseهای application از portهای domain استفاده میکنند. API نیز قابلیتهایی مانند relevance، fuzzy search، autocomplete، facets، highlighting و explain را در یک سطح HTTP منسجم ارائه میکند.
HTTP -> Presentation -> Application -> Domain
^
Infrastructure -> Elasticsearchتصمیمها و مصالحهها
| تصمیم | دلیل |
|---|---|
| فیلتر در filter context | فیلتر باید محدودکننده نتیجه باشد، نه عامل تغییر score. |
| ترتیب پایدار با tie-breaker | pagination نباید باعث skip یا duplicate شدن سندها شود. |
| جداسازی domain از Elasticsearch | منطق کسبوکار و use caseها نباید به client یا DSL وابسته شوند. |
| explainability بهعنوان capability | relevance باید قابل بررسی باشد، نه یک عدد غیرقابل توضیح. |
| قواعد معماری بهصورت test | وابستگی نادرست بین لایهها باید در build آشکار شود. |
نتیجه
خروجی یک search platform قابل اجرا و قابل بررسی است که full-text search، relevance tuning، fuzzy matching، filtering، facets، sorting، offset/cursor pagination، highlighting و explainability را پوشش میدهد. README پروژه 452 تست موفق را گزارش میکند و قواعد وابستگی معماری نیز بهصورت آزمون مکانیکی بررسی میشوند. این پروژه نمونهای از تبدیل یک نیاز مبهم برای «جستوجوی بهتر» به مسئلههای مشخص در relevance، معماری، pagination و validation است.
عمق فنی
- Elasticsearch 8.15.3 با index mapping و multi-field text/keyword
- multi_match، match_phrase، bool، fuzzy و function_score
- Facets با terms و range aggregations
- Stable pagination با search_after و tie-breaker
- _explain برای مشاهده درخت score
- Clean Architecture با dependency rules آزمونپذیر
شواهد
کد، مستندات طراحی و تستهای پروژه در GitHub قابل بررسی است.
GitHub — Elasticsearch Search Platform
Repository شامل API، معماری، مستندات relevance و search و مجموعه تستهای پروژه است.
باز کردن منبعراهکارهای مرتبط
مسئلهای در جستوجو یا معماری سرویس دارید؟
اگر relevance، search behavior، performance یا معماری یک سرویس برایتان مسئله است، میتوانیم دامنه و مسیر مناسب را بررسی کنیم.