پرش به محتوای اصلی

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 منسجم ارائه می‌کند.

text
HTTP -> Presentation -> Application -> Domain
                              ^
                      Infrastructure -> Elasticsearch

تصمیم‌ها و مصالحه‌ها

تصمیمدلیل
فیلتر در filter contextفیلتر باید محدودکننده نتیجه باشد، نه عامل تغییر score.
ترتیب پایدار با tie-breakerpagination نباید باعث skip یا duplicate شدن سندها شود.
جداسازی domain از Elasticsearchمنطق کسب‌وکار و use caseها نباید به client یا DSL وابسته شوند.
explainability به‌عنوان capabilityrelevance باید قابل بررسی باشد، نه یک عدد غیرقابل توضیح.
قواعد معماری به‌صورت 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 یا معماری یک سرویس برایتان مسئله است، می‌توانیم دامنه و مسیر مناسب را بررسی کنیم.