Start · Sprachen · PHP · Referenz · SolrServerException

SolrServerException

Klasse

Wird ausgelöst, wenn der Apache-Solr-Server selbst einen Fehler zurückgibt (z. B. ungültige Anfragen oder interne Serverfehler).

seit PHP 0.9.2 Kategorie: error

Signatur

class SolrServerException extends SolrException

Beschreibung

SolrServerException ist eine spezialisierte Ausnahme aus der PECL-Solr-Extension, die geworfen wird, sobald der Solr-Server eine Fehlerantwort (HTTP-4xx oder HTTP-5xx) zurückliefert. Sie unterscheidet sich von SolrClientException, die bei clientseitigen Problemen (z. B. fehlerhafter Konfiguration) ausgelöst wird.

Typische Situationen, in denen SolrServerException geworfen wird: syntaktisch ungültige Solr-Queries (Parser-Fehler), Anfragen an nicht existierende Felder oder Cores, sowie interne Fehler des Solr-Servers. Die Klasse erbt von SolrException, die wiederum von der eingebauten RuntimeException erbt.

Über die geerbte Methode getInternalInfo() lassen sich detaillierte Informationen über den Fehlerort im Solr-Extension-Code abrufen. Für eine robuste Fehlerbehandlung empfiehlt es sich, SolrServerException und SolrClientException separat abzufangen, um serverseitige von clientseitigen Problemen zu unterscheiden.

Da diese Klasse einen serverseitigen Fehler repräsentiert, sollte beim Auftreten die Solr-Server-Logs sowie die in der Ausnahme enthaltene Meldung geprüft werden, um die Ursache zu ermitteln.

Beispiele

SolrServerException bei einer ungültigen Query abfangen

<?php
// Verbindung zum Solr-Server herstellen
$options = [
    'hostname' => 'localhost',
    'port'     => 8983,
    'path'     => '/solr/mycore',
];

$client = new SolrClient($options);

try {
    $query = new SolrQuery();
    // Absichtlich ungültige Syntax, um einen Serverfehler auszulösen
    $query->setQuery('fieldname:[ungültige range syntax');
    $response = $client->query($query);
} catch (SolrServerException $e) {
    echo 'Solr-Serverfehler: ' . $e->getMessage() . PHP_EOL;
    echo 'Fehlercode: '       . $e->getCode()    . PHP_EOL;
    // Interne Extension-Infos (Datei, Zeile, Funktion innerhalb der Extension)
    $info = $e->getInternalInfo();
    echo 'Intern: ' . print_r($info, true) . PHP_EOL;
} catch (SolrClientException $e) {
    echo 'Solr-Clientfehler: ' . $e->getMessage() . PHP_EOL;
} catch (Exception $e) {
    echo 'Allgemeiner Fehler: ' . $e->getMessage() . PHP_EOL;
}
Solr-Serverfehler: .. (Fehlermeldung des Solr-Servers) Fehlercode: 400

Unterschied zwischen SolrServerException und SolrClientException demonstrieren

<?php
function executeSolrQuery(SolrClient $client, string $queryString): void
{
    try {
        $query = new SolrQuery($queryString);
        $queryResponse = $client->query($query);
        $response = $queryResponse->getResponse();
        echo 'Treffer: ' . $response->response->numFound . PHP_EOL;
    } catch (SolrServerException $e) {
        // Fehler kommt vom Solr-Server selbst (z. B. HTTP 400, 500)
        error_log('[SOLR-SERVER] ' . $e->getMessage());
        throw new RuntimeException('Der Suchdienst hat einen Fehler gemeldet.', 0, $e);
    } catch (SolrClientException $e) {
        // Fehler im PHP-Client (z. B. Verbindungsproblem, Konfigurationsfehler)
        error_log('[SOLR-CLIENT] ' . $e->getMessage());
        throw new RuntimeException('Der Suchdienst ist nicht erreichbar.', 0, $e);
    }
}

$options = ['hostname' => 'localhost', 'port' => 8983, 'path' => '/solr/mycore'];
$client  = new SolrClient($options);

executeSolrQuery($client, 'status:active');
Treffer: 42

// Wichtig · Fallstricke

Versionierung: Die Solr-Extension ist eine PECL-Extension und muss separat installiert werden (pecl install solr). Stellen Sie sicher, dass die Extension-Version zu Ihrer PHP-Version kompatibel ist.

Fehlerdiagnose: Die Meldung der SolrServerException enthält in der Regel den HTTP-Statuscode und die vom Solr-Server zurückgelieferte Fehlerbeschreibung. Prüfen Sie zusätzlich die Solr-Server-Logs (z. B. solr.log) für detaillierte Informationen.

Achtung: Nicht alle Serverantworten mit Fehler-HTTP-Status lösen zwingend eine SolrServerException aus — prüfen Sie die Extension-Dokumentation für Ihre installierte Version.