Signatur
Beschreibung
SolrResponse ist die Basisklasse für alle Antwort-Objekte, die von der PHP-Solr-Extension zurückgegeben werden. Sie kapselt die vollständige Kommunikationsantwort eines Apache-Solr-Servers, einschließlich HTTP-Statuscodes, Rohdaten im XML- oder JSON-Format sowie serialisierte PHP-Objektstrukturen.
Von SolrResponse erben spezialisierte Klassen wie SolrQueryResponse, SolrUpdateResponse und SolrPingResponse. Direkt instanziiert wird SolrResponse in der Regel nicht – stattdessen erhält man Objekte vom jeweiligen Subtyp als Ergebnis einer Solr-Client-Operation.
Über die Methoden der Klasse kann man den HTTP-Statuscode der Verbindung prüfen, Fehlermeldungen abfragen, die Rohantwort auslesen oder das geparste Antwort-Objekt als SolrObject-Baum abrufen. Dies erleichtert die Fehlerdiagnose und die Weiterverarbeitung von Suchergebnissen erheblich.
- getHttpStatus() – gibt den HTTP-Statuscode zurück (z. B. 200, 500).
- getResponse() – gibt das geparste Antwort-Objekt als
SolrObjectzurück. - getRawResponse() – liefert die Rohantwort des Servers als String.
- getDigestedResponse() – gibt die Antwort in einer für PHP aufbereiteten Form zurück.
- success() – gibt an, ob die Anfrage erfolgreich war.
Beispiele
Suchanfrage auswerten und Antwort prüfen
<?php
// SolrClient verbinden und eine einfache Suchanfrage stellen
$options = [
'hostname' => 'localhost',
'port' => 8983,
'path' => '/solr/mycore',
];
$client = new SolrClient($options);
$query = new SolrQuery('php');
$query->setRows(5);
/** @var SolrQueryResponse $queryResponse */
$queryResponse = $client->query($query);
// SolrQueryResponse erweitert SolrResponse
if ($queryResponse->success()) {
echo 'HTTP-Status: ' . $queryResponse->getHttpStatus() . PHP_EOL;
$result = $queryResponse->getResponse();
echo 'Gefundene Dokumente: ' . $result->response->numFound . PHP_EOL;
foreach ($result->response->docs as $doc) {
echo ' - ' . $doc->id . PHP_EOL;
}
} else {
echo 'Fehler: ' . $queryResponse->getHttpStatusMessage() . PHP_EOL;
}
Rohantwort und Fehlerbehandlung
<?php
$options = [
'hostname' => 'localhost',
'port' => 8983,
'path' => '/solr/mycore',
];
$client = new SolrClient($options);
try {
$query = new SolrQuery();
$query->setQuery('title:Solr');
$query->setRows(3);
/** @var SolrQueryResponse $response */
$response = $client->query($query);
// Rohantwort des Servers (XML oder JSON je nach Konfiguration)
echo 'Rohantwort:' . PHP_EOL;
echo $response->getRawResponse() . PHP_EOL;
// Aufbereitete Antwort als PHP-Struktur
$digested = $response->getDigestedResponse();
echo 'Aufbereitete Antwort:' . PHP_EOL;
print_r($digested);
} catch (SolrClientException $e) {
echo 'SolrClientException: ' . $e->getMessage() . PHP_EOL;
} catch (SolrServerException $e) {
echo 'SolrServerException: ' . $e->getMessage() . PHP_EOL;
}
// Wichtig · Fallstricke
Direkte Instanziierung: SolrResponse ist eine abstrakte Basisklasse und wird nicht direkt instanziiert. Man arbeitet immer mit den konkreten Unterklassen SolrQueryResponse, SolrUpdateResponse oder SolrPingResponse.
Fehlerbehandlung: Auch wenn success() true zurückgibt, sollte der HTTP-Statuscode über getHttpStatus() geprüft werden, da Solr in manchen Fällen einen 200er-Status mit einem Fehlerinhalt zurückliefern kann. Für robuste Anwendungen empfiehlt sich das Abfangen von SolrClientException und SolrServerException.
Extension-Voraussetzung: Die SolrResponse-Klasse ist Teil der PECL-solr-Extension, die separat installiert werden muss (pecl install solr). Sie ist nicht im PHP-Core enthalten.