Signatur
Beschreibung
SolrQueryResponse ist eine Klasse der PECL-Solr-Erweiterung und repräsentiert die Antwort, die der Solr-Server nach einer Suchabfrage (SolrClient::query()) zurückliefert. Sie erbt von SolrResponse und stellt Methoden bereit, um auf den Antwort-Body, den HTTP-Status, die geparsten Solr-Dokumente und weitere Metadaten zuzugreifen.
Typischerweise erhält man ein Objekt dieser Klasse als Rückgabewert von SolrClient::query(). Über die geerbte Methode getResponse() kann man auf das SolrObject zugreifen, das die vollständige Antwortstruktur mit Feldern wie responseHeader, response (Treffer, Dokumente) sowie optionalen Highlighting- und Facettierungsdaten enthält.
Die Klasse eignet sich besonders für die strukturierte Verarbeitung von Volltextsuchen in Solr-Indizes. Sie erleichtert die Extraktion von Treffern, Scores und weiteren Metadaten ohne manuelles JSON- oder XML-Parsing.
Da SolrQueryResponse nur intern instanziiert wird (kein öffentlicher Konstruktor), kann sie nicht direkt mit new erzeugt werden. Alle Instanzen entstehen ausschließlich als Rückgabewert von SolrClient::query().
Beispiele
Einfache Suchanfrage und Auswertung der Treffer
<?php
// Verbindung zum Solr-Server herstellen
$options = [
'hostname' => 'localhost',
'port' => 8983,
'path' => '/solr/mein_core',
];
$client = new SolrClient($options);
// Suchanfrage erstellen
$query = new SolrQuery();
$query->setQuery('php');
$query->setStart(0);
$query->setRows(10);
$query->addField('id')->addField('title')->addField('score');
// Abfrage ausführen – liefert SolrQueryResponse
$queryResponse = $client->query($query);
// Antwort als SolrObject abrufen
$response = $queryResponse->getResponse();
// Gesamtanzahl der Treffer
echo 'Treffer gesamt: ' . $response->response->numFound . PHP_EOL;
// Einzelne Dokumente durchlaufen
foreach ($response->response->docs as $doc) {
echo 'ID: ' . $doc->id . ' | Titel: ' . $doc->title . PHP_EOL;
}
HTTP-Status und Raw-Response prüfen
<?php
$options = [
'hostname' => 'localhost',
'port' => 8983,
'path' => '/solr/mein_core',
];
$client = new SolrClient($options);
$query = new SolrQuery('*:*');
$query->setRows(5);
$queryResponse = $client->query($query);
// HTTP-Statuscode der Solr-Antwort abrufen
echo 'HTTP-Status: ' . $queryResponse->getHttpStatus() . PHP_EOL;
// Rohes Antwort-JSON ausgeben
echo 'Rohantwort: ' . $queryResponse->getRawResponse() . PHP_EOL;
// Antwort-Digest (Prüfsumme)
echo 'Digest: ' . $queryResponse->getDigestedResponse() . PHP_EOL;
// Wichtig · Fallstricke
Nur durch SolrClient::query() instanziierbar: SolrQueryResponse besitzt keinen öffentlichen Konstruktor und darf nicht direkt mit new SolrQueryResponse() erzeugt werden.
Fehlerbehandlung: Schlägt die Abfrage fehl (z. B. Server nicht erreichbar), wirft SolrClient::query() eine SolrClientException. Es empfiehlt sich daher stets, den Aufruf in einem try/catch-Block zu kapseln.
PECL-Erweiterung erforderlich: Diese Klasse ist nur verfügbar, wenn die PECL-Erweiterung solr installiert und aktiviert ist (extension=solr in der php.ini).
Sucheingaben validieren: Benutzereingaben, die in SolrQuery::setQuery() einfließen, sollten zuvor mit SolrUtils::escapeQueryChars() bereinigt werden, um unerwünschte Abfrage-Injektionen in die Solr-Query-Syntax zu vermeiden.