Client Elasticsearch pour PHP (elasticsearch-php) : un outil puissant pour la recherche et l'analyse
\n\nElasticsearch est un système de recherche et d'analyse distribué, construit sur Apache Lucene. Il permet de stocker, rechercher et analyser de grands volumes de données en quasi temps réel. Pour interagir avec Elasticsearch depuis des applications PHP, il existe un client officiel : elasticsearch-php. Cette bibliothèque fournit une API pratique pour effectuer toutes les opérations : de l'indexation de documents aux requêtes de recherche complexes et aux agrégations.
\n\nDans cet article, nous allons détailler l'installation, la configuration et les principales fonctionnalités d'elasticsearch-php. Vous apprendrez à vous connecter à un cluster, créer un index, ajouter des documents, effectuer une recherche et utiliser des fonctions avancées telles que le filtrage et l'agrégation de données.
\n\nInstallation d'elasticsearch-php
\n\nLa bibliothèque est distribuée via Composer. Pour l'installer, exécutez la commande suivante à la racine de votre projet :
\n\ncomposer require elasticsearch/elasticsearch\n\nAprès l'installation, une dépendance apparaîtra dans le fichier composer.json. Assurez-vous d'avoir PHP version 7.4 ou supérieure, ainsi que l'extension json.
Connexion au serveur Elasticsearch
\n\nLa première étape consiste à créer un client. Pour un serveur local (par défaut, Elasticsearch écoute sur le port 9200), le code ressemblera à ceci :
\n\n<?php\nrequire 'vendor/autoload.php';\n\nuse Elastic\\Elasticsearch\\ClientBuilder;\n\n$client = ClientBuilder::create()\n ->setHosts(['localhost:9200'])\n ->build();\n?>\n\nSi votre serveur nécessite une authentification (par exemple, via un nom d'utilisateur/mot de passe ou une clé API), transmettez les paramètres :
\n\n$client = ClientBuilder::create()\n ->setHosts(['https://user:pass@localhost:9200'])\n ->setSSLVerification(false) // uniquement pour le développement\n ->build();\n\nTravailler avec les index et les documents
\n\nElasticsearch stocke les données dans des index (analogues aux tables en SQL). Créons un index products avec un mapping simple :
$params = [\n 'index' => 'products',\n 'body' => [\n 'settings' => [\n 'number_of_shards' => 1,\n 'number_of_replicas' => 0\n ],\n 'mappings' => [\n 'properties' => [\n 'title' => ['type' => 'text'],\n 'price' => ['type' => 'float'],\n 'description' => ['type' => 'text'],\n 'category' => ['type' => 'keyword']\n ]\n ]\n ]\n];\n\n$response = $client->indices()->create($params);\n\nAjoutons maintenant quelques documents :
\n\n$documents = [\n ['title' => 'Ordinateur portable Dell XPS 15', 'price' => 1200.00, 'description' => 'Ultrabook puissant pour le travail', 'category' => 'electronics'],\n ['title' => 'Livre "PHP pour les professionnels"', 'price' => 45.50, 'description' => 'Apprentissage de PHP à un niveau avancé', 'category' => 'books'],\n ['title' => 'Casque Sony WH-1000XM5', 'price' => 350.00, 'description' => 'Casque sans fil avec réduction de bruit', 'category' => 'electronics']\n];\n\nforeach ($documents as $id => $doc) {\n $params = [\n 'index' => 'products',\n 'id' => $id + 1,\n 'body' => $doc\n ];\n $response = $client->index($params);\n}\n\nRecherche de documents
\n\nEffectuons une recherche en texte intégral dans le champ title :
$params = [\n 'index' => 'products',\n 'body' => [\n 'query' => [\n 'match' => [\n 'title' => 'ordinateur portable'\n ]\n ]\n ]\n];\n\n$response = $client->search($params);\n$hits = $response['hits']['hits'];\n\nforeach ($hits as $hit) {\n echo "ID: " . $hit['_id'] . " | Titre: " . $hit['_source']['title'] . " | Prix: " . $hit['_source']['price'] . "\n";\n} Aussi dans la bibliothèque
Programmation réactive en Rust : bibliothèques, frameworks et exemples pratiques
Client Redis pour Go (Golang) — go-redis et radix
Jetons JWT en TypeScript : guide complet pour travailler avec les JSON Web Tokens
Travailler avec Markdown en Java : bibliothèques, analyse et conversion
Client OAuth pour Rust : bibliothèque oauth2