عميل 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