Client Elasticsearch pour PHP : elasticsearch-php
Elasticsearch est un puissant moteur de recherche distribué et une base de données analytique, construit sur Apache Lucene. Pour interagir avec lui depuis des applications PHP, il existe un client officiel — elasticsearch-php. Cette bibliothèque fournit une API complète et pratique pour toutes les opérations : de l'indexation de documents aux requêtes complexes de texte intégral et aux agrégations.
Installation et connexion
L'installation se fait via Composer — le gestionnaire de paquets standard pour PHP :
composer require elasticsearch/elasticsearchAprès l'installation, il faut créer une instance du client en spécifiant l'hôte (ou plusieurs hôtes) de votre cluster Elasticsearch :
<?phprequire 'vendor/autoload.php';
use Elastic\\Elasticsearch\\ClientBuilder;
$client = ClientBuilder::create() ->setHosts(['http://localhost:9200']) ->build();?>Pour une connexion sécurisée (HTTPS, authentification), vous pouvez passer des paramètres supplémentaires :
$client = ClientBuilder::create() ->setHosts(['https://user:password@my-elastic.cloud:9243']) ->setSSLVerification(false) // uniquement pour les tests ! ->build();Opérations principales avec les données
Création d'un index
Un index dans Elasticsearch est l'équivalent d'une base de données en SQL. Avant de sauvegarder des données, vous pouvez le créer explicitement avec un 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);Indexation d'un document (ajout/mise à jour)
Pour ajouter un document, on utilise la méthode index :
$params = [ 'index' => 'products', 'id' => '1', 'body' => [ 'title' => 'Ordinateur portable ASUS ROG', 'price' => 120000.00, 'created_at' => '2025-01-15' ]];
$response = $client->index($params);Si un document avec cet id existe déjà, il sera écrasé. Pour une mise à jour partielle, on utilise update.
Récupération d'un document
$params = [ 'index' => 'products', 'id' => '1'];
$response = $client->get($params);$document = $response['_source'];echo $document['title']; // Ordinateur portable ASUS ROGSuppression d'un document
$params = [ 'index' => 'products', 'id' => '1'];
$response = $client->delete($params);Recherche et filtrage
La fonctionnalité la plus puissante d'Elasticsearch est la recherche en texte intégral. Exemple de recherche de produits par nom :
$params = [ 'index' => 'products', 'body' => [ 'query' => [ 'match' => [ 'title' => 'ordinateur portable' ] ] ]];
$response = $client->search($params);
// Traitement des résultatsforeach ($response['hits']['hits'] as $hit) { echo 'ID: ' . $hit['_id'] . ', Title: ' . $hit['_source']['title'] . "";}On peut combiner les conditions avec des requêtes bool :
$params = [ 'index' => 'products', 'body' => [ 'query' => [ 'bool' => [ 'must' => [ ['match' => ['title' => 'ordinateur portable']] ], 'filter' => [ ['range' => ['price' => ['gte' => 50000 Aussi dans la bibliothèque
Travailler avec les dates en Swift : Foundation et DateFormatter
Métriques Prometheus dans Node.js : la bibliothèque prom-client pour le monitoring
gomail
Travailler avec YAML en TypeScript : guide complet d'analyse et de sérialisation
Validation des données en Go : bibliothèques, exemples et bonnes pratiques