عميل Elasticsearch لـ PHP: elasticsearch-php. دليل كامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

عميل Elasticsearch لـ PHP: elasticsearch-php



Elasticsearch هو نظام بحث موزع وقاعدة بيانات تحليلية قوية، مبني على Apache Lucene. للتفاعل معه من تطبيقات PHP، يوجد عميل رسمي — elasticsearch-php. توفر هذه المكتبة واجهة برمجة تطبيقات (API) مريحة وكاملة لجميع العمليات: من فهرسة المستندات إلى الاستعلامات النصية الكاملة المعقدة والتجميعات.



التثبيت والاتصال



يتم التثبيت عبر Composer — مدير الحزم القياسي لـ PHP:



composer require elasticsearch/elasticsearch


بعد التثبيت، يجب إنشاء مثيل للعميل، مع تحديد المضيف (أو عدة مضيفات) لمجموعة Elasticsearch الخاصة بك:



<?phprequire 'vendor/autoload.php';

use Elastic\\Elasticsearch\\ClientBuilder;

$client = ClientBuilder::create() ->setHosts(['http://localhost:9200']) ->build();?>


للاتصال الآمن (HTTPS، المصادقة)، يمكن تمرير معلمات إضافية:



$client = ClientBuilder::create()    ->setHosts(['https://user:password@my-elastic.cloud:9243'])    ->setSSLVerification(false) // للاختبار فقط!    ->build();


العمليات الأساسية على البيانات



إنشاء فهرس (Index)



الفهرس في Elasticsearch هو ما يعادل قاعدة البيانات في SQL. قبل حفظ البيانات، يمكن إنشاؤه صراحةً مع تعيين (Mapping):



$params = [    'index' => 'products',    'body' => [        'settings' => [            'number_of_shards' => 1,            'number_of_replicas' => 1        ],        'mappings' => [            'properties' => [                'title' => ['type' => 'text'],                'price' => ['type' => 'float'],                'created_at' => ['type' => 'date']            ]        ]    ]];

$response = $client->indices()->create($params);


فهرسة مستند (إضافة/تحديث)



لإضافة مستند واحد، يتم استخدام طريقة index:



$params = [    'index' => 'products',    'id' => '1',    'body' => [        'title' => 'لابتوب ASUS ROG',        'price' => 120000.00,        'created_at' => '2025-01-15'    ]];

$response = $client->index($params);


إذا كان المستند الذي يحمل نفس id موجودًا بالفعل — فسيتم استبداله. للتحديث الجزئي، يتم استخدام update.



استرجاع مستند



$params = [    'index' => 'products',    'id' => '1'];

$response = $client->get($params);$document = $response['_source'];echo $document['title']; // لابتوب ASUS ROG


حذف مستند



$params = [    'index' => 'products',    'id' => '1'];

$response = $client->delete($params);


البحث والتصفية



أقوى ميزة في Elasticsearch هي البحث النصي الكامل. مثال للبحث عن منتجات حسب الاسم:



$params = [    'index' => 'products',    'body' => [        'query' => [            'match' => [                'title' => 'لابتوب'            ]        ]    ]];

$response = $client->search($params);

// معالجة النتائجforeach ($response['hits']['hits'] as $hit) { echo 'ID: ' . $hit['_id'] . ', Title: ' . $hit['_source']['title'] . "";}


يمكن دمج الشروط باستخدام استعلامات bool:



$params = [    'index' => 'products',    'body' => [        'query' => [            'bool' => [                'must' => [                    ['match' => ['title' => 'لابتوب']]                ],                'filter' => [                    ['range' => ['price' => ['gte' => 50000                    

توصيات