طريقة سهلة لاستخدام عميل Elastic Search الرسمي في تطبيقات Laravel أو Lumen.
قم بتثبيت الإصدار الحالي من حزمة mailerlite/laravel-elasticsearch
عبر الملحن:
composer require mailerlite/laravel-elasticsearch
إذا كنت تستخدم الإصدار 5 من ElasticSearch، فقم بتثبيت الإصدار 2 من هذه الحزمة:
composer require mailerlite/laravel-elasticsearch:^2
سيقوم مزود خدمة الحزمة تلقائيًا بتسجيل مزود الخدمة الخاص به.
نشر ملف التكوين:
php artisan vendor:publish --provider= " MailerLiteLaravelElasticsearchServiceProvider "
بعد نشر ملف التكوين كما هو مقترح أعلاه، يمكنك تكوين ElasticSearch عن طريق إضافة ما يلي إلى ملف .env
الخاص بتطبيقك (مع القيم المناسبة):
ELASTICSEARCH_HOST =localhost
ELASTICSEARCH_PORT =9200
ELASTICSEARCH_SCHEME =http
ELASTICSEARCH_USER =
ELASTICSEARCH_PASS =
إذا كنت تقوم بتسجيل الدخول عبر مفاتيح API، فستحتاج إلى ملء هذه القيم:
ELASTICSEARCH_API_ID =
ELASTICSEARCH_API_KEY =
إذا كنت تتصل بمثيلات ElasticSearch على Amazon AWS، فسوف تحتاج أيضًا إلى composer require aws/aws-sdk-php:^3.80
وإضافة ما يلي إلى ملف .env
الخاص بك:
AWS_ELASTICSEARCH_ENABLED =true
AWS_REGION =...
AWS_ACCESS_KEY_ID =...
AWS_SECRET_ACCESS_KEY =...
إذا كان عليك استخدام طريقة مصادقة أخرى تحتوي على بيانات اعتماد مخصصة (على سبيل المثال instanceProfile()
)، فيجب عليك نشر ملف التكوين واستخدام aws_credentials :
<?php
// config/elasticsearch.php
$ provider = Aws Credentials CredentialProvider:: instanceProfile ();
$ memoizedProvider = Aws Credentials CredentialProvider:: memoize ( $ provider );
$ credentials = $ memoizedProvider ()-> wait ();
. . .
' hosts ' => [
[
' host ' => env ( ' ELASTICSEARCH_HOST ' , ' localhost ' ),
// For local development, the default Elasticsearch port is 9200.
// If you are connecting to an Elasticsearch instance on AWS, you probably want to set this to null
' port ' => env ( ' ELASTICSEARCH_PORT ' , 9200 ),
' scheme ' => env ( ' ELASTICSEARCH_SCHEME ' , null ),
' user ' => env ( ' ELASTICSEARCH_USER ' , null ),
' pass ' => env ( ' ELASTICSEARCH_PASS ' , null ),
// If you are connecting to an Elasticsearch instance on AWS, you will need these values as well
' aws ' => env ( ' AWS_ELASTICSEARCH_ENABLED ' , false ),
' aws_region ' => env ( ' AWS_REGION ' , '' ),
' aws_key ' => env ( ' AWS_ACCESS_KEY_ID ' , '' ),
' aws_secret ' => env ( ' AWS_SECRET_ACCESS_KEY ' , '' )
' aws_credentials ' => $ credentials
],
],
إذا كان لديك وظيفة تعمل كمشرف، فيجب عليك استخدام الإغلاق. بهذه الطريقة سيتم تجديد بيانات الاعتماد في وقت التشغيل.
<?php
// config/elasticsearch.php
$ provider = Aws Credentials CredentialProvider:: instanceProfile ();
$ memoizedProvider = Aws Credentials CredentialProvider:: memoize ( $ provider );
. . .
' hosts ' => [
[
...
' aws_credentials ' => $ memoizedProvider
],
],
إذا كنت تستخدم php artisan config:cache
، فلن تتمكن من الحصول على Closure في ملف التكوين الخاص بك، قم بتسميته على النحو التالي:
<?php
// config/elasticsearch.php
. . .
' hosts ' => [
[
...
' aws_credentials ' => [ Aws Credentials CredentialProvider::class, ' defaultProvider ' ],
],
],
إذا كنت تعمل مع Lumen، فيرجى تسجيل مزود الخدمة والتكوين في bootstrap/app.php
:
$ app -> register ( MailerLite LaravelElasticsearch ServiceProvider::class);
$ app -> configure ( ' elasticsearch ' );
انسخ ملف التكوين يدويًا إلى التطبيق الخاص بك.
تعد واجهة Elasticsearch
مجرد نقطة دخول إلى عميل ES، لذا ربما تكون قد استخدمت سابقًا:
use Elasticsearch ClientBuilder ;
$ data = [
' body ' => [
' testField ' => ' abc '
],
' index ' => ' my_index ' ,
' type ' => ' my_type ' ,
' id ' => ' my_id ' ,
];
$ client = ClientBuilder:: create ()-> build ();
$ return = $ client -> index ( $ data );
يمكنك الآن استبدال هذين السطرين الأخيرين بكل بساطة:
use Elasticsearch ;
$ return = Elasticsearch:: index ( $ data );
سيؤدي ذلك إلى تشغيل الأمر على الاتصال الافتراضي. يمكنك تشغيل أمر على أي اتصال (راجع إعداد defaultConnection
ومجموعة connections
في ملف التكوين).
$ return = Elasticsearch:: connection ( ' connectionName ' )-> index ( $ data );
يمكن لمستخدمي Lumen الذين يرغبون في استخدام Facades القيام بذلك عن طريق تحرير ملف bootstrap/app.php
ليتضمن ما يلي:
$ app -> withFacades ( true , [
...
MailerLite LaravelElasticsearch Facade::class => ' Elasticsearch ' ,
...
]);
سيحتاج مستخدمو Lumen الذين لا يستخدمون الواجهات إلى استخدام حقن التبعية أو حاوية التطبيق للحصول على كائن خدمة ES:
// using injection:
public function handle ( Mailerlite LaravelElasticsearch Manager $ elasticsearch )
{
$ elasticsearch -> ping ();
}
// using application container:
$ elasticSearch = $ this -> app ( ' elasticsearch ' );
بالطبع، يعمل حقن التبعية وحاوية التطبيق لتطبيقات Laravel أيضًا.
نظرًا لأن الحزمة عبارة عن غلاف حول عميل Elastic الرسمي، يمكنك فعل أي شيء تقريبًا باستخدام هذه الحزمة. لا يمكنك فقط إجراء عمليات CRUD القياسية، ولكن يمكنك أيضًا مراقبة سلامة المجموعة المرنة برمجيًا، أو عمل نسخة احتياطية منها، أو إجراء تغييرات عليها. تتم بعض هذه العمليات من خلال أوامر "مساحة الاسم"، والتي تدعمها هذه الحزمة بكل سرور.
للحصول على إحصائيات للفهرس:
$ stats = Elasticsearch:: indices ()-> stats ([ ' index ' => ' my_index ' ]);
$ stats = Elasticsearch:: nodes ()-> stats ();
$ stats = Elasticsearch:: cluster ()-> stats ();
لإنشاء اللقطات واستعادتها (اقرأ المستندات المرنة حول إنشاء مسارات المستودع والمكونات الإضافية أولاً):
$ response = Elasticsearch:: snapshots ()-> create ( $ params );
$ response = Elasticsearch:: snapshots ()-> restore ( $ params );
لحذف المؤشرات بأكملها (كن حذرًا!):
$ response = Elasticsearch:: indices ()-> delete ([ ' index ' => ' my_index ' ]);
يرجى تذكر أن هذه الحزمة عبارة عن غلاف رفيع حول عدد كبير من الميزات المرنة المتطورة جدًا والموثقة جيدًا. يمكن العثور على معلومات حول هذه الميزات والطرق والمعلمات المستخدمة لاستدعائها في الوثائق المرنة. المساعدة في استخدامها متاحة عبر المنتديات المرنة وعلى مواقع مثل Stack Overflow.
توفر هذه الحزمة أيضًا بعض أوامر وحدة التحكم المفيدة.
التحقق من وجود فهرس:
php artisan laravel-elasticsearch:utils:index-exists < your_elasticsearch_index_name >
إنشاء فهرس:
php artisan laravel-elasticsearch:utils:index-create < your_elasticsearch_index_name >
حذف فهرس:
php artisan laravel-elasticsearch:utils:index-delete < your_elasticsearch_index_name >
إنشاء أو تحديث تعيين الفهرس: ملاحظة: يجب أن يحتوي ملف تعيين الفهرس على تعريف تعيين JSON صالح كما تتوقع Elasticsearch، على سبيل المثال:
{
"body" : {
"_source" : {
"enabled" : true
},
"properties" : {
"id" : {
"type" : " keyword "
},
"property_1" : {
"type" : " text "
},
"property_2" : {
"type" : " text "
}
}
}
}
php artisan laravel-elasticsearch:utils:index-create-or-update-mapping < your_elasticsearch_index_name > < json_mapping_absolute_file_path >
ينشئ اسمًا مستعارًا:
php artisan laravel-elasticsearch:utils:alias-create < your_elasticsearch_index_name > < your_elasticsearch_alias_name >
إزالة الفهرس من الاسم المستعار:
php artisan laravel-elasticsearch:utils:alias-remove-index < your_elasticsearch_index_name > < your_elasticsearch_alias_name >
تبديل الفهرس على الاسم المستعار (مفيد لإصدار الفهرس الجديد بدون توقف):
php artisan laravel-elasticsearch:utils:alias-switch-index < your_NEW_elasticsearch_index_name > < your_OLD_elasticsearch_index_name > < your_elasticsearch_alias_name >
شكرا لكل من ساهم في هذا المشروع!
الرجاء استخدام Github للإبلاغ عن الأخطاء وإبداء التعليقات أو الاقتراحات.
راجع CONTRIBUTING.md لمعرفة كيفية المساهمة في التغييرات.
تمت كتابة laravel-elasticsearch بفضل Colin Viebrock وتم إصداره بموجب ترخيص MIT. تتم صيانته وتطويره بواسطة MailerLite
حقوق الطبع والنشر (ج) 2023 MailerLite