Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Laravel 5
Code

نحوه راه‌اندازی جستجوی Full-Text با استفاده از Scout در Laravel

by
Difficulty:IntermediateLength:MediumLanguages:

Persian (پارسی) translation by Mahshad Kalantari (you can also view the original English article)

جستجوی Full-Text حیاتی است تا به کاربران اجازه دهد در وبسایت های پرمحتوا حرکت کنند. در این مطلب، به شما آموزش خواهم داد چگونه جستجوی full-text را برای یک اپلیکیشن لاراول پیاده سازی کنید. در حقیقت، از کتابخانه‌ی Laravel Scout استفاده خواهیم کرد، که پیاده سازی جستجوی full-text را راحت و جذاب می‌کند.

Laravel Scout دقیقا چیست؟ مستندات رسمی به صورت خلاصه توضیح می‌دهد:

Laravel Scout، یک راه حل ساده و مبتنی بر درایور برای اضافه کردن جستجوی full-text به مدل‌های Eloquent فراهم می‌کند. با استفاده از ناظرهای مدل (observers)، کتابخانه Scout به صورت خودکار ایندکس‌های جستجوی شما را با رکوردهای Eloquent مطابقت می‌دهد.

به طور کلی، Laravel Scout یک کتابخانه است که هربار که داده‌های مدل تغییر می‌کند، کنترل ایندکس‌ها را مدیریت می‌کند. جایی که داده‌ها وابسته به درایوری که با کتابخانه Scout پیکربندی کرده‌اید ایندکس خواهند شد.

در حال حاضر، کتابخانه Scout از Algolia، یک API موتور جستجوی ابری، پشتیبانی می‌کند، و این چیزی است که ما در این مقاله برای پیاده سازی جستجوی full-text استفاده خواهیم کرد.

با نصب کتابخانه‌های سرور Algolia و Scout شروع خواهیم کرد، و همانطور که پیش می‌رویم از طریق مثال های دنیای واقعی نشان می‌دهیم چگونه می‌توانید داده‌های خود را ایندکس و جستجو کنید.

پیکربندی سرور

در این بخش، قصد داریم وابستگی هایی که لازم است تا کتابخانه Scout با لاراول کار کند را نصب کنیم. بعد از نصب، باید مقداری تنظیمات انجام دهیم تا لاراول بتواند کتابخانه Scout را شناسایی کند.

بیایید پیش برویم و کتابخانه Scout را با استفاده از Composer نصب کنیم.

تمام کاری که باید برای نصب کتابخانه Scout انجام می دادیم همین بود. اکنون که کتابخانه Scout را نصب کرده ایم، بیایید مطمئن شویم که لاراول آن را می شناسد.

 احتمالا با مفهوم service provider در لاراول، که به شما امکان پیکیربندی سرویس ها را در برنامه‌تان می دهد، آشنا هستید. بنابراین، هرزمان که می خواهید سرویس جدیدی را در برنامه لاراول خود فعال کنید، فقط باید مسیر service provider مربوطه را در config/app.php اضافه کنید.

اگر هنوز با service provider ها آشنا نیستید، به شدت توصیه می کنم خودتون را دوست داشته باشید و این مقاله مقدماتی که اساس service provider ها را شرح می دهد بخوانید.

در این مورد، ما فقط باید ScoutServiceProvider را به لیست service provider ها در config/app.php اضافه کنیم، همانطور که در بخش زیر نشان داده شده است.

حالا، لاراول service provider ای به نام ScoutServiceProvider را می شناسد. کتابخانه Scout یک فایل پیکربندی دارد که به ما اجازه می دهد کلید اعتبار API را تنظیم کنیم.

بیایید منابع ارائه شده توسط کتابخانه Scout را با استفاده از دستور زیر منتشر کنیم.

همانطور که می بینید، فایل vendor/laravel/scout/config/scout.php را به config/scout.php کپی کرده است.

بعد، یک حساب کاربری Algolia بسازید زیرا در وهله اول به کلید اعتبار API نیاز داریم. زمانی که اطلاعات API را داشتید، بیایید تنظیمات لازم را در فایل config/scout.php پیکربندی کنیم، همانطور که در قسمت زیر نشان داده شده است.

توجه کنید که مقدار SCOUT_DRIVER را به درایور algolia تنظیم کرده ایم. بنابراین، لازم است تنظیمات لازم برای درایور Algolia را در انتهای فایل پیکربندی کنید. اساسا، فقط باید id و secret را که از حساب Algolia دریافت کرده اید، تنظیم کنید.

همانطور که می بینید، مقادیر را از متغیرهای محیطی می گیریم. بنابراین بیاید مطمئن شویم که متغیرهای زیر را به درستی در فایل .env تنظیم کرده ایم.

در نهایت، باید SDK پی اچ پی Algolia را نصب کنیم، که برای ارتباط با Algolia با استفاده از API ها مورد استفاده قرار خواهد گرفت. بگذارید آن را با composer نصب کنیم، همانطور که در قسمت زیر نشان داده شده است.

و با آن، تمام وابستگی هایی را که برای ارسال و ایندکس کردن داده به سرویس Algolia لازم است، نصب کرده ایم.

ساخت مدل های قابل ایندکس و قابل جستجو

در بخش قبل، تمام کارهای سخت برای راه اندازی کتابخانه های Scout و Algolia را انجام دادیم تا بتوانیم با استفاده از سرویس جستجوی Algolia، داده ها را ایندکس و جستجو کنیم.

در این بخش، از طریق یک مثال نشان می دهیم که چگونه می توانید داده های موجود را ایندکس کرده و نتایج جستجو را از Algolia دریافت کنید. فرض می کنیم که شما یک مدل Post پیشفرض در برنامه خود دارید که در مثالمان استفاده می کنیم.

اولین کاری که لازم است انجام دهیم این است که تریت Laravel\Scout\Searchable را به مدل Post اضافه کنیم که مدل Post را قابل جستجو می کند؛ Laravel هربار که رکورد post اضافه، آپدیت یا حذف می شود، رکوردهای post را با ایندکس Algolia همگام سازی می کند.

این گونه مدل Post سرچ-فرندلی است.

سپس، می خواهیم فیلدهای که باید در ابتدا ایندکس شود را پیکربندی کنیم. البته، لازم نیست همه فیلدهای مدل خود را در Algolia ایندکس کنید تا آن را سبک و مفید نگه دارید. در حقیقت، به آن نیازی ندارید.

می توانید toSearchableArray را در کلاس مدل اضافه کنید تا فیلدهایی که باید ایندکس شود را پیکربندی کنید.

حالا، آماده وارد کردن و ایندکس کردن رکوردهای Post در Algolia هستیم. در حقیقت، کتابخانه Scout با ارائه دستور artisan زیر، این کار را آسان می کند.

این دستور تمام رکوردهای مدل Post را یکجا وارد می کند. آن ها به محض وارد شدن ایندکس می شوند، بنابراین آماده کوئری زدن به رکوردها هستیم. بروید و داشبورد Algolia را بررسی کنید تا رکوردهای وارد شده و سایر خدمات را ببینید.

چگونه کار می کند

در این بخش، یک مثال می زنیم که نشان می دهد چگونه عملیات CRUD و جستجو را که با ایندکس های Algolia به صورت بلادرنگ (real time) همگام سازی شده اند انجام دهیم.

فایل app/Http/Controllers/SearchController.php را با محتوای زیر ایجاد کنید.

البته، باید مسیرهای مربوطه را نیز اضافه کنیم.

بیاید ببینیم چگونه از طریق متد query یک جستجو در Algolia بزنیم.

به یاد بیاورید که مدل Post را با اضافه کردن تریت Searchable قابل جستجو کردیم. بنابراین، مدل Post می تواند از متد search برای دریافت رکوردها از ایندکس Algolia استفاده کند. در مثال بالا، سعی داریم رکوردهایی را پیدا کنیم که مطابق با کلمه کلیدی title باشند.

بعدی، متد add است که روند اضافه کردن رکورد post جدید را تقلید می کند.

چیز خاصی در کد بالا وجود ندارد؛ فقط یک رکورد post جدید با استفاده از مدل Post می سازد. اما مدل Post تریت Searchable را پیاده سازی می کند، بنابراین در این لحظه Laravel مقداری کار اضافی با ایندکس کردن رکورد تازه ایجاد شده در Algolia انجام می دهد. بنابراین همانطور که می بینید، ایندکس کردن به صورت بلادرنگ (real time) انجام می شود.

در آخر به متد delete می رسیم. بیاید آن را بررسی کنیم.

همانطور که انتظار داشتید، رکورد ها به محض اینکه از دیتابیس حذف شوند، از ایندکس Algolia نیز حذف می شوند.

اساسا، اگر بخواهید مدل های موجود را قابل جستجو کنید هیچ کار اضافی از سمت شما لازم نیست. همه چیز توسط کتابخانه Scout با استفاده از ناظرهای مدل (observers) مدیریت می شود.

و همچنین ما را به پایان این مقاله می رساند!

نتيجه گيري

امروز، ما درباره نحوه پیاده سازی جستجوی full-text در Laravel با استفاده از کتابخانه Scout صحبت کردیم. در این روند، ما نصب های لازم و مثال های واقعی را شرح دادیم.

در صورت داشتن هر گونه سوال و یا شک و تردید می توانید آن را از طریق فرم نظرات زیر بپرسید!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.