Start · Sprachen · PHP · Referenz · SolrResponse

SolrResponse

Klasse

Stellt eine Antwort des Solr-Servers dar und bietet Zugriff auf HTTP-Status, Antwortdaten und Fehlerinformationen.

seit PHP 0.9.2 Kategorie: db

Signatur

class SolrResponse

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 SolrObject zurü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;
}
HTTP-Status: 200 Gefundene Dokumente: 42 - doc_001 - doc_002 - doc_003 - doc_004 - doc_005

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.