Elasticsearch-Client für PHP: elasticsearch-php – vollständige Anleitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Elasticsearch-Client für PHP (elasticsearch-php): Leistungsstarkes Tool für Suche und Analyse

\n\n

Elasticsearch ist ein verteiltes Such- und Analysesystem, das auf Apache Lucene basiert. Es ermöglicht das Speichern, Durchsuchen und Analysieren großer Datenmengen nahezu in Echtzeit. Für die Interaktion mit Elasticsearch aus PHP-Anwendungen gibt es den offiziellen Client – elasticsearch-php. Diese Bibliothek bietet eine praktische API für alle Operationen: von der Indizierung von Dokumenten bis hin zu komplexen Suchabfragen und Aggregationen.

\n\n

In diesem Artikel werden wir die Installation, Konfiguration und die wichtigsten Funktionen von elasticsearch-php im Detail behandeln. Sie erfahren, wie Sie eine Verbindung zu einem Cluster herstellen, einen Index erstellen, Dokumente hinzufügen, eine Suche durchführen und erweiterte Funktionen wie Filterung und Datenaggregation nutzen.

\n\n

Installation von elasticsearch-php

\n\n

Die Bibliothek wird über Composer verteilt. Führen Sie zur Installation folgenden Befehl im Stammverzeichnis Ihres Projekts aus:

\n\n
composer require elasticsearch/elasticsearch
\n\n

Nach der Installation erscheint die Abhängigkeit in der Datei composer.json. Stellen Sie sicher, dass Sie PHP Version 7.4 oder höher sowie die Erweiterung json installiert haben.

\n\n

Verbindung zum Elasticsearch-Server herstellen

\n\n

Der erste Schritt ist die Erstellung eines Clients. Für einen lokalen Server (standardmäßig hört Elasticsearch auf Port 9200) sieht der Code wie folgt aus:

\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\n

Wenn Ihr Server eine Authentifizierung erfordert (z. B. über Benutzername/Passwort oder API-Key), übergeben Sie die Parameter:

\n\n
$client = ClientBuilder::create()\n    ->setHosts(['https://user:pass@localhost:9200'])\n    ->setSSLVerification(false) // nur für die Entwicklung\n    ->build();
\n\n

Arbeiten mit Indizes und Dokumenten

\n\n

Elasticsearch speichert Daten in Indizes (vergleichbar mit Tabellen in SQL). Erstellen wir einen Index products mit einem einfachen Mapping:

\n\n
$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\n

Jetzt fügen wir einige Dokumente hinzu:

\n\n
$documents = [\n    ['title' => 'Dell XPS 15 Laptop', 'price' => 1200.00, 'description' => 'Leistungsstarkes Ultrabook für die Arbeit', 'category' => 'electronics'],\n    ['title' => 'Buch "PHP für Profis"', 'price' => 45.50, 'description' => 'Fortgeschrittenes PHP-Studium', 'category' => 'books'],\n    ['title' => 'Kopfhörer Sony WH-1000XM5', 'price' => 350.00, 'description' => 'Kabellose Kopfhörer mit Geräuschunterdrückung', '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\n

Suche nach Dokumenten

\n\n

Führen wir eine Volltextsuche im Feld title durch:

\n\n
$params = [\n    'index' => 'products',\n    'body' => [\n        'query' => [\n            'match' => [\n                'title' => 'Laptop'\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'] . " | Titel: " . $hit['_source']['title'];\n}

Empfehlungen