Start · Sprachen · PHP · Referenz · SolrQueryResponse

SolrQueryResponse

Klasse

Stellt die Antwort des Solr-Servers auf eine Suchabfrage dar und ermöglicht den Zugriff auf Suchergebnisse und Antwort-Metadaten.

seit PHP 0.9.2 Kategorie: db

Signatur

class SolrQueryResponse extends SolrResponse

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;
}
Treffer gesamt: 42 ID: 1 | Titel: PHP Grundlagen ID: 2 | Titel: PHP 8 Neuerungen ...

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;
HTTP-Status: 200 Rohantwort: {"responseHeader":{"status":0,...},"response":{"numFound":100,...}} Digest: ...

// 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.