استخدام Laravel Scout لتمكين البحث عن نص كامل

نشرت: 2023-05-08

أصبح إطار عمل Laravel مصدرًا أساسيًا للمطورين الذين يبنون خدمات الويب.

كأداة مفتوحة المصدر ، يوفر Laravel عددًا لا يحصى من الوظائف الجاهزة التي تمكن المطورين من بناء تطبيقات قوية وعملية.

من بين عروضها Laravel Scout ، مكتبة لإدارة فهارس البحث لتطبيقك. تسمح مرونته للمطورين بضبط التكوينات والاختيار من برامج تشغيل Algolia أو Meilisearch أو MySQL أو Postgres لتخزين الفهارس.

هنا ، سوف نستكشف هذه الأداة بعمق ، ونعلمك كيفية إضافة دعم البحث عن نص كامل إلى تطبيق Laravel من خلال برنامج التشغيل. ستعمل على تصميم تطبيق Laravel التجريبي لتخزين اسم القطارات النموذجية ثم استخدام Laravel Scout لإضافة بحث إلى التطبيق.

المتطلبات الأساسية

للمتابعة ، يجب أن يكون لديك:

  • برنامج التحويل البرمجي PHP مثبت على جهاز الكمبيوتر الخاص بك. يستخدم هذا البرنامج التعليمي إصدار PHP 8.1.
  • تم تثبيت محرك Docker أو Docker Desktop على جهاز الكمبيوتر الخاص بك
  • حساب سحابة Algolia ، يمكنك إنشاؤه مجانًا
هل تريد أن تجعل تطبيقك أكثر سهولة في الاستخدام؟ حاول إضافة دعم البحث عن نص كامل! إليك كيفية استخدام Laravel Scout ️ انقر للتغريد

كيفية تثبيت Scout في مشروع Laravel

لاستخدام Scout ، يجب عليك أولاً إنشاء تطبيق Laravel حيث تنوي إضافة وظيفة البحث. يحتوي سكربت Laravel-Scout Bash على الأوامر لإنشاء تطبيق Laravel داخل حاوية Docker. يعني استخدام Docker أنك لست بحاجة إلى تثبيت برامج دعم إضافية ، مثل قاعدة بيانات MySQL.

يستخدم سكربت Laravel-scout لغة البرمجة Bash ، لذلك يجب عليك تنفيذها في بيئة Linux. إذا كنت تقوم بتشغيل Windows ، فتأكد من تكوين Windows Subsystem for Linux (WSL).

إذا كنت تستخدم WSL ، فنفّذ الأمر التالي في جهازك لتعيين توزيع Linux المفضل لديك.

 wsl -s ubuntu

بعد ذلك ، انتقل إلى الموقع على جهاز الكمبيوتر الخاص بك الذي ترغب في وضع المشروع فيه. سينشئ سكربت Laravel-Scout دليل مشروع هنا. في المثال أدناه ، سينشئ البرنامج النصي Laravel-Scout دليلاً داخل دليل سطح المكتب .

 cd /desktop

قم بتشغيل الأمر أدناه لتنفيذ سكربت Laravel-Scout. سوف يقوم بتدعيم تطبيق Dockerized برمز معياري ضروري.

 curl -s https://laravel.build/laravel-scout-app | bash

بعد التنفيذ ، قم بتغيير الدليل الخاص بك باستخدام cd laravel-scout-app . بعد ذلك ، قم بتشغيل الأمر sail-up داخل مجلد المشروع لبدء حاويات Docker لتطبيقك.

ملاحظة: في العديد من توزيعات Linux ، قد تحتاج إلى تشغيل الأمر أدناه باستخدام الأمر sudo لبدء امتيازات مرتفعة.

 ./vendor/bin/sail up

قد تواجه خطأ:

خطأ يوضح تخصيص المنفذ
خطأ يوضح تخصيص المنفذ.

لحل هذه المشكلة ، استخدم متغير APP_PORT لتحديد منفذ داخل الأمر sail up :

 APP_PORT=3001 ./vendor/bin/sail up

بعد ذلك ، قم بتنفيذ الأمر أدناه لتشغيل التطبيق من خلال Artisan على خادم PHP.

 php artisan serve
خدمة تطبيق Laravel مع Artisan
خدمة تطبيق Laravel مع Artisan

من متصفح الويب الخاص بك ، انتقل إلى التطبيق قيد التشغيل على http://127.0.0.1:8000. سيعرض التطبيق صفحة الترحيب في Laravel في المسار الافتراضي.

صفحة الترحيب في تطبيق Laravel
صفحة الترحيب في تطبيق Laravel

كيفية إضافة Laravel Scout إلى التطبيق

في الجهاز الطرفي ، أدخل الأمر لتمكين مدير حزمة Composer PHP من إضافة Laravel Scout إلى المشروع.

 composer require laravel/scout

بعد ذلك ، انشر ملف تكوين Scout باستخدام الأمر vendor: publish. سيقوم الأمر بنشر ملف تكوين scout.php في دليل التكوين الخاص بتطبيقك.

 php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"

الآن ، قم بتعديل ملف boilerplate .env ليحتوي على قيمة منطقية SCOUT_QUEUE .

ستسمح قيمة SCOUT_QUEUE لسكاوت بعمليات قائمة الانتظار ، مما يوفر أوقات استجابة أفضل. بدونها ، لن يعكس سائقو الكشافة مثل Meilisearch الأرقام القياسية الجديدة على الفور.

 SCOUT_QUEUE=true

أيضًا ، قم بتعديل متغير DB_HOST في ملف .env للإشارة إلى مضيفك المحلي لاستخدام قاعدة بيانات MySQL داخل حاويات Docker.

 DB_HOST=127.0.0.1

كيفية تحديد نموذج وتكوين الفهرس

لا يقوم Scout بتمكين نماذج البيانات القابلة للبحث افتراضيًا. يجب وضع علامة صراحة على نموذج على أنه قابل للبحث باستخدام سمة Laravel\Scout\Searchable الخاصة به.

ستبدأ بإنشاء نموذج بيانات لتطبيق Train تجريبي وتمييزه على أنه قابل للبحث.

كيفية إنشاء نموذج

بالنسبة لتطبيق Train ، سترغب في تخزين أسماء العناصر النائبة لكل قطار متاح.

قم بتنفيذ الأمر Artisan أدناه لإنشاء الترحيل وتسميته create_trains_table .

 php artisan make:migration create_trains_table
إجراء ترحيل باسم create_trains_table
إجراء ترحيل باسم create_trains_table

سيتم إنشاء الترحيل في ملف يجمع اسمه بين الاسم المحدد والطابع الزمني الحالي.

افتح ملف الترحيل الموجود في قاعدة البيانات / التهجيرات / الدليل.

لإضافة عمود عنوان ، أضف التعليمات البرمجية التالية بعد العمود id() في السطر 17. سيضيف الرمز عمود عنوان.

 $table->string('title');

لتطبيق الترحيل ، قم بتنفيذ الأمر أدناه.

 php artisan migrate
تطبيق هجرة الحرفيين
تطبيق هجرة الحرفيين

بعد تشغيل عمليات ترحيل قاعدة البيانات ، أنشئ ملفًا باسم Train.php في دليل التطبيق / النماذج / .

كيفية إضافة سمة LaravelScoutSearchable

قم بتمييز نموذج Train للبحث عن طريق إضافة سمة Laravel\Scout\Searchable إلى النموذج ، كما هو موضح أدناه.

 <?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Laravel\Scout\Searchable; class Train extends Model { use Searchable; public $fillable = ['title'];

تحتاج أيضًا إلى تكوين فهارس البحث عن طريق تجاوز طريقة searchable . سيستمر السلوك الافتراضي لـ Scout في النموذج لمطابقة اسم جدول النموذج.

لذلك ، أضف الكود التالي إلى ملف Train.php أسفل الرمز من الكتلة السابقة.

 /** * Retrieve the index name for the model. * * @return string */ public function searchableAs() { return 'trains_index'; } }

كيفية استخدام Algolia مع Scout

لأول بحث عن نص كامل باستخدام Laravel Scout ، ستستخدم برنامج تشغيل Algolia. Algolia هي عبارة عن منصة برمجية كخدمة (SaaS) تستخدم للبحث في كميات كبيرة من البيانات. يوفر لوحة معلومات على الويب للمطورين لإدارة فهارس البحث الخاصة بهم وواجهة برمجة تطبيقات قوية يمكنك الوصول إليها عبر مجموعة تطوير البرامج (SDK) بلغة البرمجة المفضلة لديك.

داخل تطبيق Laravel ، ستستخدم حزمة عميل Algolia لـ PHP.

كيفية إعداد Algolia

أولاً ، يجب عليك تثبيت حزمة عميل بحث Algolia PHP لتطبيقك.

نفّذ الأمر أدناه.

 composer require algolia/algoliasearch-client-php

بعد ذلك ، يجب عليك تعيين معرف التطبيق وبيانات اعتماد واجهة برمجة التطبيقات السرية من Algolia في ملف .env .

باستخدام متصفح الويب الخاص بك ، انتقل إلى لوحة معلومات Algolia للحصول على معرّف التطبيق وبيانات اعتماد مفتاح واجهة برمجة التطبيقات السرية.

انقر فوق الإعدادات في الجزء السفلي من الشريط الجانبي الأيسر للانتقال إلى صفحة الإعدادات .

بعد ذلك ، انقر فوق API Keys داخل قسم الفريق والوصول في صفحة الإعدادات لعرض مفاتيح حساب Algolia الخاص بك.

الانتقال إلى صفحة API Keys على Algolia Cloud
صفحة مفاتيح API على Algolia Cloud

في صفحة مفاتيح واجهة برمجة التطبيقات ، لاحظ قيم معرّف التطبيق ومفتاح واجهة برمجة تطبيقات المشرف . ستستخدم بيانات الاعتماد هذه لمصادقة الاتصال بين تطبيق Laravel و Algolia.

عرض معرف التطبيق ومفاتيح واجهة برمجة تطبيقات المسؤول من صفحة مفاتيح واجهة برمجة تطبيقات Algolia
معرّف التطبيق ومفاتيح واجهة برمجة تطبيقات المشرف

أضف الكود أدناه إلى ملف .env الخاص بك باستخدام محرر الكود الخاص بك واستبدل العناصر النائبة بأسرار Algolia API المقابلة.

 ALGOLIA_APP_ID=APPLICATION_ID ALGOLIA_SECRET=ADMIN_API_KEY

أيضًا ، استبدل متغير SCOUT_DRIVER بالكود أدناه لتغيير القيمة من meilisearch إلى algolia . سيؤدي تغيير هذه القيمة إلى توجيه Scout لاستخدام برنامج تشغيل Algolia.

 SCOUT_DRIVER=algolia

كيفية إنشاء وحدات التحكم في التطبيق

ضمن الدليل app / Http / Controllers / ، أنشئ ملف TrainSearchController.php لتخزين وحدة تحكم للتطبيق. ستدرج وحدة التحكم البيانات وتضيفها إلى نموذج Train .

قم بإضافة كتلة التعليمات البرمجية التالية إلى ملف TrainSearchController.php لإنشاء وحدة التحكم.

 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Models\Train; class TrainSearchController extends Controller { /** * Get the index name for the model. * * @return string */ public function index(Request $request) { if($request->has('titlesearch')){ $trains = Train::search($request->titlesearch) ->paginate(6); }else{ $trains = Train::paginate(6); } return view('Train-search',compact('trains')); } /** * Get the index name for the model. * * @return string */ public function create(Request $request) { $this->validate($request,['title'=>'required']); $trains = Train::create($request->all()); return back(); } }

كيفية إنشاء مسارات التطبيق

في هذه الخطوة ، ستنشئ المسارات لإدراج القطارات الجديدة وإضافتها إلى قاعدة البيانات.

افتح ملف path / web.php واستبدل الكود الحالي بالكتلة أدناه.

 <?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\TrainSearchController; Route::get('/', function () { return view('welcome'); }); Route::get('trains-lists', [TrainSearchController::class, 'index']) -> name ('trains-lists'); Route::post('create-item', [TrainSearchController::class, 'create']) -> name ('create-item');

يحدد الكود أعلاه طريقين في التطبيق. يسرد طلب GET لمسار /trains-lists جميع بيانات القطار المخزنة. ينشئ طلب POST لمسار /create-item بيانات قطار جديدة.

كيفية إنشاء طرق عرض التطبيق

قم بإنشاء ملف داخل resources / views / directory وقم بتسميته Train-search.blade.php . سيعرض الملف واجهة المستخدم لوظيفة البحث.

أضف محتوى كتلة التعليمات البرمجية أدناه إلى ملف Train-search.blade.php لإنشاء صفحة واحدة لوظيفة البحث.

 <!DOCTYPE html> <html> <head> <title>Laravel - Laravel Scout Algolia Search Example</title> <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> </head> <body> <div class="container"> <h2 class="text-bold">Laravel Full-Text Search Using Scout </h2><br/> <form method="POST" action="{{ route('create-item') }}" autocomplete="off"> @if(count($errors)) <div class="alert alert-danger"> <strong>Whoops!</strong> There is an error with your input. <br/> <ul> @foreach($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <input type="hidden" name="_token" value="{{ csrf_token() }}"> <div class="row"> <div class="col-md-6"> <div class="form-group {{ $errors->has('title') ? 'has-error' : '' }}"> <input type="text" name="title" class="form-control" placeholder="Enter Title" value="{{ old('title') }}"> <span class="text-danger">{{ $errors->first('title') }}</span> </div> </div> <div class="col-md-6"> <div class="form-group"> <button class="btn btn-primary">Create New Train</button> </div> </div> </div> </form> <div class="panel panel-primary"> <div class="panel-heading">Train Management</div> <div class="panel-body"> <form method="GET" action="{{ route('trains-lists') }}"> <div class="row"> <div class="col-md-6"> <div class="form-group"> <input type="text" name="titlesearch" class="form-control" placeholder="Enter Title For Search" value="{{ old('titlesearch') }}"> </div> </div> <div class="col-md-6"> <div class="form-group"> <button class="btn btn-primary">Search</button> </div> </div> </div> </form> <table class="table"> <thead> <th>Id</th> <th>Train Title</th> <th>Creation Date</th> <th>Updated Date</th> </thead> <tbody> @if($trains->count()) @foreach($trains as $key => $item) <tr> <td>{{ ++$key }}</td> <td>{{ $item->title }}</td> <td>{{ $item->created_at }}</td> <td>{{ $item->updated_at }}</td> </tr> @endforeach @else <tr> <td colspan="4">No train data available</td> </tr> @endif </tbody> </table> {{ $trains->links() }} </div> </div> </div> </body> </html>

يحتوي كود HTML أعلاه على عنصر نموذج مع حقل إدخال وزر لكتابة عنوان قطار قبل حفظه في قاعدة البيانات. يحتوي الرمز أيضًا على جدول HTML يعرض المعرف ، والعنوان ، و created_at ، و updated_at تفاصيل إدخال قطار داخل قاعدة البيانات.

كيفية استخدام البحث Algolia

لعرض الصفحة ، انتقل إلى http://127.0.0.1:8000/trains-lists من متصفح الويب الخاص بك.

عرض بيانات نموذج القطار المعروضة في صفحة قوائم القطارات
بيانات نموذج القطار

قاعدة البيانات فارغة حاليًا ، لذا تحتاج إلى إدخال عنوان تدريب تجريبي في حقل الإدخال والنقر فوق إنشاء قطار جديد لحفظه.

إدخال قطار جديد
إدخال قطار جديد

لاستخدام ميزة البحث ، اكتب كلمة أساسية من أي عناوين قطار محفوظة في حقل إدخال إدخال العنوان للبحث وانقر فوق بحث .

كما هو موضح في الصورة أدناه ، لن يتم عرض سوى إدخالات البحث التي تحتوي على الكلمة الأساسية في عناوينها.

استخدام ميزة البحث للعثور على دخول القطار
استخدام ميزة البحث للعثور على دخول القطار

Meilisearch مع Laravel Scout

Meilisearch هو محرك بحث مفتوح المصدر يركز على السرعة والأداء وتجربة المطور المحسنة. تشترك في العديد من الميزات مع Algolia ، باستخدام نفس الخوارزميات وهياكل البيانات والبحث - ولكن بلغة برمجة مختلفة.

يمكن للمطورين إنشاء مثيل Meilisearch واستضافته ذاتيًا داخل البنية التحتية السحابية أو المحلية الخاصة بهم. لدى Meilisearch أيضًا عرض سحابي تجريبي مشابه لـ Algolia للمطورين الذين يرغبون في استخدام المنتج دون إدارة بنيته التحتية.

في البرنامج التعليمي ، لديك بالفعل مثيل محلي لـ Meilisearch قيد التشغيل داخل حاويات Docker الخاصة بك. ستقوم الآن بتوسيع وظيفة Laravel Scout لاستخدام مثيل Meilisearch.

لإضافة Meilisearch إلى تطبيق Laravel ، قم بتشغيل الأمر أدناه في محطة مشروعك.

 composer require meilisearch/meilisearch-php

بعد ذلك ، تحتاج إلى تعديل متغيرات Meilisearch داخل ملف .env لتكوينه.

استبدل متغيرات SCOUT_DRIVER و MEILISEARCH_HOST و MEILISEARCH_KEY في ملف .env بالمتغيرات أدناه.

 SCOUT_DRIVER=meilisearch MEILISEARCH_HOST=http://127.0.0.1:7700 MEILISEARCH_KEY=LockKey

يحدد مفتاح SCOUT_DRIVER برنامج التشغيل الذي يجب أن يستخدمه Scout ، بينما يمثل MEILISEARCH_HOST المجال الذي يعمل عليه مثيل Meilisearch. على الرغم من أنه ليس مطلوبًا أثناء التطوير ، يوصى بإضافة MEILISEARCH_KEY في الإنتاج.

ملاحظة: قم بالتعليق على معرف Algolia و Secret عند استخدام Meilisearch كسائق مفضل لديك.

بعد إكمال تكوينات .env ، يجب عليك فهرسة سجلاتك الموجودة مسبقًا باستخدام الأمر Artisan أدناه.

 php artisan scout:import "App\Models\Train"

Laravel Scout مع محرك قاعدة البيانات

قد يكون محرك قاعدة بيانات Scout هو الأنسب للتطبيقات التي تستخدم قواعد بيانات أصغر أو تدير أعباء عمل أقل كثافة. حاليًا ، يدعم محرك قاعدة البيانات PostgreSQL و MySQL.

يستخدم هذا المحرك عبارات "where-like" وفهارس النص الكامل مقابل قاعدة البيانات الحالية ، مما يمكّنه من العثور على نتائج البحث الأكثر صلة. لست بحاجة إلى فهرسة سجلاتك عند استخدام محرك قاعدة البيانات.

لاستخدام محرك قاعدة البيانات ، يجب عليك تعيين متغير .env SCOUT_DRIVER إلى قاعدة البيانات.

افتح ملف .env داخل تطبيق Laravel وقم بتغيير قيمة متغير SCOUT_DRIVER .

 SCOUT_DRIVER = database

بعد تغيير برنامج التشغيل الخاص بك إلى قاعدة البيانات ، سيتحول Scout إلى استخدام محرك قاعدة البيانات للبحث عن نص كامل.

محرك التجميع مع Laravel Scout

بالإضافة إلى محرك قاعدة البيانات ، تقدم Scout أيضًا محرك تجميع. يستخدم هذا المحرك عبارات "أين" وتصفية المجموعة لاستخراج نتائج البحث الأكثر صلة.

بخلاف محرك قاعدة البيانات ، يدعم محرك المجموعة جميع قواعد البيانات الارتباطية التي يدعمها Laravel أيضًا.

يمكنك استخدام محرك المجموعة عن طريق تعيين متغير بيئة SCOUT_DRIVER collection أو عن طريق تحديد برنامج تشغيل المجموعة يدويًا في ملف تكوين Scout.

 SCOUT_DRIVER = collection

مستكشف مع Elasticsearch

بفضل قوة استعلامات Elasticsearch ، يعد Explorer محرك بحث Elasticsearch حديث لـ Laravel Scout. إنه يوفر برنامج تشغيل Scout متوافق ومزايا مثل تخزين كميات هائلة من البيانات والبحث فيها وتحليلها في الوقت الفعلي. تقدم Elasticsearch باستخدام Laravel نتائج بالمللي ثانية.

لاستخدام برنامج تشغيل Elasticsearch Explorer في تطبيق Laravel الخاص بك ، ستحتاج إلى تكوين ملف boilerplate docker-compose.yml الذي أنشأه البرنامج النصي Laravel-Scout. ستضيف التكوينات الإضافية لـ Elasticsearch وإعادة تشغيل الحاويات.

افتح ملف docker-compose.yml واستبدل محتوياته بما يلي.

 # For more information: https://laravel.com/docs/sail version: '3' services: laravel.test: build: context: ./vendor/laravel/sail/runtimes/8.1 dockerfile: Dockerfile args: WWWGROUP: '${WWWGROUP}' image: sail-8.1/app extra_hosts: - 'host.docker.internal:host-gateway' ports: - '${APP_PORT:-80}:80' - '${VITE_PORT:-5173}:${VITE_PORT:-5173}' environment: WWWUSER: '${WWWUSER}' LARAVEL_SAIL: 1 XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}' XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}' volumes: - '.:/var/www/html' networks: - sail depends_on: - mysql - redis - meilisearch - mailhog - selenium - pgsql - elasticsearch mysql: image: 'mysql/mysql-server:8.0' ports: - '${FORWARD_DB_PORT:-3306}:3306' environment: MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' MYSQL_ROOT_HOST: "%" MYSQL_DATABASE: '${DB_DATABASE}' MYSQL_USER: '${DB_USERNAME}' MYSQL_PASSWORD: '${DB_PASSWORD}' MYSQL_ALLOW_EMPTY_PASSWORD: 1 volumes: - 'sail-mysql:/var/lib/mysql' - './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh' networks: - sail healthcheck: test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"] retries: 3 timeout: 5s elasticsearch: image: 'elasticsearch:7.13.4' environment: - discovery.type=single-node ports: - '9200:9200' - '9300:9300' volumes: - 'sailelasticsearch:/usr/share/elasticsearch/data' networks: - sail kibana: image: 'kibana:7.13.4' environment: - elasticsearch.hosts=http://elasticsearch:9200 ports: - '5601:5601' networks: - sail depends_on: - elasticsearch redis: image: 'redis:alpine' ports: - '${FORWARD_REDIS_PORT:-6379}:6379' volumes: - 'sail-redis:/data' networks: - sail healthcheck: test: ["CMD", "redis-cli", "ping"] retries: 3 timeout: 5s pgsql: image: 'postgres:13' ports: - '${FORWARD_DB_PORT:-5432}:5432' environment: PGPASSWORD: '${DB_PASSWORD:-secret}' POSTGRES_DB: '${DB_DATABASE}' POSTGRES_USER: '${DB_USERNAME}' POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}' volumes: - 'sailpgsql:/var/lib/postgresql/data' networks: - sail healthcheck: test: ["CMD", "pg_isready", "-q", "-d", "${DB_DATABASE}", "-U", "${DB_USERNAME}"] retries: 3 timeout: 5s meilisearch: image: 'getmeili/meilisearch:latest' ports: - '${FORWARD_MEILISEARCH_PORT:-7700}:7700' volumes: - 'sail-meilisearch:/meili_data' networks: - sail healthcheck: test: ["CMD", "wget", "--no-verbose", "--spider", "http://localhost:7700/health"] retries: 3 timeout: 5s mailhog: image: 'mailhog/mailhog:latest' ports: - '${FORWARD_MAILHOG_PORT:-1025}:1025' - '${FORWARD_MAILHOG_DASHBOARD_PORT:-8025}:8025' networks: - sail selenium: image: 'selenium/standalone-chrome' extra_hosts: - 'host.docker.internal:host-gateway' volumes: - '/dev/shm:/dev/shm' networks: - sail networks: sail: driver: bridge volumes: sail-mysql: driver: local sail-redis: driver: local sail-meilisearch: driver: local sailpgsql: driver: local sailelasticsearch: driver: local

بعد ذلك ، قم بتشغيل الأمر أدناه لسحب صورة Elasticsearch الجديدة التي أضفتها إلى ملف docker-compose.yml .

 docker-compose up

بعد ذلك ، قم بتنفيذ أمر Composer أدناه لتثبيت Explorer في المشروع.

 composer require jeroen-g/explorer

تحتاج أيضًا إلى إنشاء ملف تكوين لبرنامج تشغيل Explorer.

قم بتنفيذ الأمر Artisan أدناه لإنشاء ملف explorer.config لتخزين التكوينات.

 php artisan vendor:publish --tag=explorer.config

سيكون ملف التكوين الذي تم إنشاؤه أعلاه متاحًا في دليل / config .

في ملف config / explorer.php الخاص بك ، يمكنك الرجوع إلى نموذجك باستخدام مفتاح indexes .

 'indexes' => [ \App\Models\Train::class ],

قم بتغيير قيمة متغير SCOUT_DRIVER داخل ملف .env إلى elastic لتكوين Scout لاستخدام برنامج تشغيل Explorer.

 SCOUT_DRIVER = elastic

في هذه المرحلة ، ستستخدم Explorer في نموذج Train من خلال تنفيذ واجهة Explorer وتجاوز طريقة mappableAs() .

افتح ملف Train.php داخل دليل التطبيقات> النماذج واستبدل الكود الموجود بالرمز أدناه.

 <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use JeroenG\Explorer\Application\Explored; use Laravel\Scout\Searchable; class Train extends Model implements Explored { use HasFactory; use Searchable; protected $fillable = ['title']; public function mappableAs(): array { return [ 'id'=>$this->Id, 'title' => $this->title, ]; } }

باستخدام الرمز الذي أضفته أعلاه ، يمكنك الآن استخدام Explorer للبحث عن نص داخل نموذج Train .

Laravel + Scout = تكامل بحث نص كامل سريع وقوي ونظيف. أنشئ تطبيقًا تجريبيًا وجربه باستخدام هذا الدليل ️ انقر للتغريد

ملخص

بالنسبة لمطوري PHP ، فإن Laravel والوظائف الإضافية مثل Scout تجعل من السهل دمج وظائف البحث عن النص الكامل السريعة والقوية. باستخدام محرك قاعدة البيانات ومحرك التجميع وإمكانيات Meilisearch و Elasticsearch ، يمكنك التفاعل مع قاعدة بيانات تطبيقك وتنفيذ آليات بحث متقدمة في أجزاء من الثانية فقط.

تعني إدارة قاعدة البيانات وتحديثها بسلاسة أن المستخدمين يتلقون تجربة مثالية بينما تظل التعليمات البرمجية الخاصة بك نظيفة وفعالة.

من خلال حلول استضافة التطبيقات وقواعد البيانات ، Kinsta هو متجرك الشامل لجميع احتياجات تطوير Laravel الحديثة. أول 20 دولارًا علينا.