در این مطلب قراره یه پروژه برنامه نویسی موتور جستجوی وب رو که خودم وقت زیادی برای نوشتنش صرف کردم بهتون معرفی کنم. این پروژه به زبان php نوشته شده و پایگاه داده آن mysql میباشد.

آدرس گیت هاب پروژه: 

https://github.com/socoot/SearchEngine

در این پروژه از یک فایل indexer برای خزیدن در بین صفحات وب و همچنین ایندکس کردن مطالب آن ها استفاده میشود که با تغییر دادن پارامترهای این صفحه میتوان نحوه ایندکس شدن مطلب را تغییر داد.

در طراحی ایندکسر به ازای هر تگ html مقداری به عنوان چگالی تگ (tag density) در نظر گرفته شده است و تمامی کلمات هر صفحه از یکدیگر جدا شده و هر کدام به عنوان یک کلمه کلیدی در database ذخیره میگردد. به ازای هر کلمه کلیدی یک چگالی (density) در نظر گرفته شده که همراه با آن ذخیره میشود و از فرمول مجموع - چگالی تگ x تعداد تکرار آن کلمه کلیدی در آن تگ - در کل صفحه محاسبه میشود.

به هنگام جستجو نیز کلمات عبارت جستجو شده از یکدیگر جدا میشوند و صفحات جستجو شده به ترتیب مجموع چگالی کلمه کلیدی به صورت نزولی مرتب میشوند و صفحه بندی شده و نمایش داده میشوند.

به ازای هر entry موجود در جواب جستجو یک بار خود url آن entry خزش شده و نتیجه جستجو در صفحه خزش شده در همان لحظه به کاربر نمایش داده میشود که البته ممکن است موجب کم شدن سرعت شود چون به ازای هر جستجو حداکثر 10 صفحه خزش میشوند.

به ازای بارگذاری هر بار صفحه جستجو، یک درخواست به صورت ajax برای indexer فرستاده میشود که صفحه بعدی مورد نظرش را ایندکس و ذخیره کند و این دیگر نیاز به وجود cronjob را منتفی مینماید و بر اساس تعداد بازدید کننده این موتور جستجو کارش انجام میگردد ولی میتوان برای فایل indexer یک cronjob را تنظیم نمود تا در بازه های زمانی مشخصی اقدام به ایندکس صفحات وب بنماید.

این موتور جستجو علاوه بر صفحات وب، محتوای آن صفحات شامل عکس ها و آهنگ ها و فیلم ها و کتاب ها و هر گونه محتوای مفید را ذخیره مینماید و فعلا فقط بر اساس صفحه وبی که به آن محتوا اشاره دارد (یا به صورت لینک به آن محتوا یا به صورت نمایش محتوا در صفحه) جستجو را انجام میدهد.

نقاط ضعف این اسکریپت:

1- مسئله performance میباشد که با بالا رفتن تعداد entry های جداول database سرعت جستجوی صفحات و نمایش نتایج کاهش می یابد.

2- الگوریتم های استفاده شده برای ایندکس و جستجو بسیار ساده هستند مثل الگوریتم های مربوط به بحث link popularity ولی برای رسیدن به نقطه مطلوب باید از چندین الگوریتم دیگر محاسباتی و منطقی استفاده شود تا کیفیت صفحات جستجو شده بالا برود ولی در حال حاضر فقط برای عبارات یک کلمه ای و دو کلمه ای مناسب است نه بیشتر.

3- این موتور جستجو فعلا MVC نیست و model و view و controller به صورت تفکیک نشده هستند که اصلا مناسب نیست و برای توسعه بهتر لازم است بار دیگر با زبان دیگری به غیر از php یا با استفاده از framework های مشهوری مثل laravel بازنویسی شود.

4- هنوز صفحات وب این اسکریپت responsive نیست و نمایش قابل قبولی در موبایل و تبلت ندارد.