برای این سوال، نسخهی داتنت شما باید ۷ باشد.
شما به قبل سال 2000
برگشتهاید، زمانی که فناوری دیتابیسها به تازگی در حال ظهور است و مهندسان در تلاشند تا راهحلهای نوآورانهای برای جستجوی اطلاعات پیدا کنند. بسیاری از آنها از ایدههای جدید شگفتزده شده و دنیای فناوری اطلاعات در آستانهی تغییرات شگرفی است.
شما که از آینده خبر دارید، تصمیم گرفتهاید سیستم ابتدایی Full-Text Search
را پیادهسازی کنید. با این اختراع، شما نه تنها دنیای جستجو را متحول میکنید بلکه تاریخ را نیز تحت تأثیر قرار خواهید داد و این اختراع را به نام خود ثبت خواهید کرد.
پروژهی اولیه را از این لینک دانلود کنید. ساختار فایلهای پروژه بهصورت زیر است:
شما باید سه کلاس Document
، Index
و Query
را مطابق با مواردی که در ادامه مطرح میشود، کامل کنید.
Document
🔗اولین کلاسی که باید تکمیل کنید کلاس Document
است. این کلاس بدنه اصلی داکیومنتهای شما را برای اندیس مشخص میکند و باید شامل ویژگیهای(property) زیر باشد:
نام | نوع |
---|---|
Id | long |
Text | string |
Date | DateTime |
Query
🔗این کلاس شامل ویژگیهای کوئری است که قصد دارید طبق این ویژگیها داکیومنتهایی را از درون اندیس بازیابی کنید. این کلاس شامل ویژگیهای زیر میشود:
نام | نوع |
---|---|
Text | string |
Date | DateTime |
EndDate | DateTime |
Index
🔗این کلاس اصلیترین کلاسی است که باید پیادهسازی کنید. این کلاس شامل داکیومنتها و اندیسها میشود. اندیسهای این کلاس در واقعا اندیسهای معکوس (Inverted index) به هر داکیومنت هستند.
همانطور که میبینید، دو اندیس textIndex
و dateIndex
وجود دارند که نحوه ساخت این اندیسها در ادامه آورده شده است. مطابق این فایل، شما در این کلاس باید یک کانستراکتور و سه متد که در ادامه جزئیات آنها ذکر میشود را پیادهسازی نمایید:
کانستراکتور Index
: این کانستراکتور فایلی که در مسیر ورودی دریافت کرده را به صورت متن خوانده و اندیسهای گفته شده را باید به درستی مقداردهی کند.
متد saveIndexToFile
: این متد یک مسیر را دریافت و کل کلاس Index
را با تمام مقادیرش به صورت متن در این مسیر ذخیره میکند.
متد indexDocument
: این متد یک داکیومنت را دریافت میکند و اندیسهای گفته شده را به صورت زیر ایجاد میکند:
textIndex
باید ویژگی text
هر داکیومنت براساس کاراکترهای غیر کلمهای (حرف، رقم یا _
) شکسته شود و داکیومنتها اندیس شوند. dateIndex
هر داکیومنت براساس ویژگی date
خودش اندیس میشود.متد search
: این متد وظیفه دارد تا داکیومنتهایی را براساس کوئری ورودی برگرداند. هر کدام از ویژگیهای کلاس Query
میتواند نال باشند ولی در صورتی که هر کدام از مقادیر نال نبود باید داکیومنتهایی براساس اولویت زیر برگردانده شوند:
مثالهایی به صورت تست نمونه در اختیار شما قرار داده شده است که میتوانید از آنها کمک بگیرید. به عنوان مثال به مورد زیر دقت کنید:
خروجی مثال بالا باید داکیومنتها با آیدی 1
و 2
را برگرداند.
Document
و Query
باید شامل کانستراکتوری با همه ویژگیها باشند.پس از پیادهسازی موارد خواستهشده، فقط این سه کلاس را زیپ کرده و آپلود کنید.