یکی از مشکلاتی که در سایت های دروپالی با محتوای بسیار زیاد (مثلا بیش از 10000 محتوا) وجود دارد جستجوی کند آنها و فشار جستجو بر منابع سرور است. درباره راه حلی برای این مشکل مدتی تحقیق و بررسی کردم و بعد از انجام چند پروژه نتیجهاش را خدمتتان ارانه میکنم.
* مطالب بیان شده ناظر به دروپال نسخه 6 و 7 هست و نسخه 8 مورد بررسی واقع نشده است.
تحلیل سیستم جستجوی هسته دروپال
دروپال از یک سیستم ایندکس کلمات برای جستجوی خود استفاده میکند. کارکرد این سیستم بدین گونه است که وقتی محتواهایی وارد سایت می شود در دورههای زمانی مشخصی با اجرای کرون سایت، شروع به ایندکس کردن محتوا میکند. سه جدول در دیتابیس سایت برای جستجو وجود دارد:
جدول search_dataset: در این جدول محتواها با حذف تگهای html ذخیره میشوند.
جدول search_total: کل کلیدواژههای موجود در محتواها (هر کلیدواژه یکبار در جدول وجود دارد)
جدول search_index: ارتباط کلیدواژهها با محتواها که نتیجتا کلیدواژههای تکراری هم در این جدول قرار می گیرند. به طور مثال اگر محتوایی با 1000 کلمه وارد سایت بشود 1000 ردیف(رکورد) در جدول search_index و یک ردیف در search_dataset و تعدادی هم در search_total اضافه می کند.
این سیستم در هنگام جستجوی یک کلیدواژه در سایت با ایجاد یک کوئری بسیار طولانی و با ارتباط دادن(Left Join) جداول متعدد search_dataset, search_total, search_index, node, comment, node_count نتایج را نمایش می دهد که در سایت های با تعداد محتوای متوسط سرعت بدی ندارد. اما در سایتهای بزرگ هم در ایندکس گذاری و هم در فراخوانی نتایج جستجو فشار زیادی بر سرویس دیتابیس و پردازنده سرور وارد می کند که اگر جستجوهای همزمانی در سایت صورت گیرد امکان پایین آمد کارایی سایت وجود دارد.
موتورهای جستجوی سایت(Search Engine)
برای حل این معضل در سایت های بزرگ و با محتواهای زیاد از موتورهای جستجوی خاص استفاده می کنند. برخی از این موتورها فروشی و برخی متن باز هستند. برخی سایت ها هم این سرویس را با دریافت وجهی ارائه می دهند.
یکی از موتورهای جستجوی متن باز که دروپال برای سایتهای سنگین پیشنهاد می دهد و خود سایت پشتیبان دروپال نیز از آن استفاده میکند سرویس Apache Solr است. این سیستم تفاوت های فراوانی با سیستم جستجوی هسته دروپال دارد. برخی از ویژگی های این سیستم عبارتند از:
1- سولار یک موتور جستجوی سریع بر پایه جاوا است
2- برای اجرا نیاز به اجرا بودن جاوا 1.7 به بالا دارد.
3- هم در سرورهای لینوکس و هم در ویندوز قابل اجرا هست.
4- بیشتر آموزشهایی که برای این سرویس در اینترنت وجود دارد بر پایه لینوکس هست اما درباره نصب در ویندوز هم مقالاتی یافت می شود.
5- نسخه نهایی این سرویس 6 هست اما دروپال در حال حاضر با نسخه 5 این سرویس ارتباط می گیرد.
6- دروپال (یا هر سایت یا برنامه دیگری) با اجرای کرون محتواهای ایندکس نشده را به صورت کامل فراخوانده و به آدرس اینترنتی (آی پی یا آدرس سایت) سرویس سولار ارسال میکند لذا از دیتابیس و پردازنده سرور جهت ایندکس گذاری استفاده نمیشود.
* عدم استفاده از دیتابیس این فایده را دارد که حجم بالای جداول جستجو دیگر نیازی به بک آپ گیری ندارد و دیگر منابع سرور برای ایندکس گذاری هزینه ای صرف نمی کند.
7- سولار با گرفتن محتوا و ذخیره آن شروع به ایندکس گذاری سریع آن می کند و از آنجا که ایندکس ها و لاگ ها و ... را در قالب فایل ذخیره می کند نیازی به دیتابیس نداشته و تنها پردازنده را مشغول میکند.
* در یک پروژه در سیستم لوکال 22000 محتوا از یک سایت در حدود یک ساعت توسط سولار ایندکس شد.
8- سولار یک پنل مدیریتی دارد که می توان در آن هستههای متعددی برای جستجوهای متعدد از طرف سایتهای مختلف یا یک سایت ایجاد کرد.
9- سولار با کوئری های url کار می کند.
10 - در دروپال جستجوی سولار جایگزین جستجوی پیش فرض آن می شود. برای این منظور می توان از افزونه Apache Solr Search یا Search API Solr Search استفاده نمود.
11- امکان استفاده از فیلترهای نتایج جستجو(facets) به راحتی با جستجوی سولار انجام می شود. به عنوان مثال وقتی کاربر عبارت اینترنت را جستجو می کند و مثلا 1000 محتوا یافته می شود. در صفحه جستجو بلوکهایی نمایش داده می شود که این 1000 محتوا را بر اساس گزینههای مختلفی می تواند فیلتر کند مانند نوع محتوا:کتاب، مقاله، فیلم و .... یا نویسنده و مترجم و .... مانند آنچه که در جستجوی سایت های فروشگاهی مانند دیجی کالا و گوگل و خود سایت دروپال مرسوم است.
12- خود Solr به طور پیش فرض سیستم شناسایی کاربر مدیر یا autentication ندارد و با افزودن تغییراتی در سه فایل کانفیگ آن می توان از Basic HTML Authentication استفاده کرد.
دانلود نسخه های مختلف سولار از سایت اصلی: http://archive.apache.org/dist/lucene/solr
* نسخه tgz برای لینوکس و zip برای ویندوز
آموزش نصب و داکیومنت سولار: https://cwiki.apache.org/confluence/display/solr/Installing+Solr