Signatur
Beschreibung
SolrDocument ist eine Klasse der PECL-Erweiterung solr und repräsentiert ein einzelnes Dokument, das als Ergebnis einer Suchanfrage von einem Apache Solr-Server zurückgeliefert wurde. Jedes Dokument besteht aus einer Menge von Feldern (fields), die jeweils einen oder mehrere Werte enthalten können.
Die Klasse implementiert ArrayAccess, sodass auf Felder wie auf Array-Einträge zugegriffen werden kann (z. B. $doc['title']). Zusätzlich unterstützt sie Iterator, was das Durchlaufen aller Felder mit foreach ermöglicht. Über Serializable kann ein Dokument serialisiert und deserialisiert werden.
Typischerweise erhält man SolrDocument-Objekte nicht direkt über den Konstruktor, sondern als Teil einer SolrQueryResponse nach dem Aufruf von SolrClient::query(). Die einzelnen Felder eines Dokuments sind als SolrDocumentField-Objekte abrufbar.
Im Unterschied zu SolrInputDocument, das zum Indexieren von Dokumenten dient, wird SolrDocument ausschließlich zum Lesen von Suchergebnissen verwendet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $keine | Der Konstruktor von SolrDocument erwartet keine Parameter. Instanzen werden in der Regel automatisch durch die Solr-Erweiterung erzeugt. |
Rückgabewert
Beispiele
Suchergebnisse abrufen und Dokumentfelder auslesen
<?php
// Verbindung zum Solr-Server herstellen
$options = [
'hostname' => 'localhost',
'port' => 8983,
'path' => '/solr/mycore',
];
$client = new SolrClient($options);
// Suchanfrage erstellen
$query = new SolrQuery();
$query->setQuery('php');
$query->setStart(0);
$query->setRows(5);
$query->addField('id')->addField('title')->addField('author');
// Anfrage ausführen
$queryResponse = $client->query($query);
$response = $queryResponse->getResponse();
// Antwort-Objekt auslesen
$documents = $response->response->docs;
foreach ($documents as $doc) {
/** @var SolrDocument $doc */
echo 'ID: ' . $doc->id . PHP_EOL;
echo 'Titel: ' . $doc->title . PHP_EOL;
echo 'Autor: ' . $doc->author . PHP_EOL;
echo '---' . PHP_EOL;
}
?>
Array-Zugriff und Iterator-Nutzung auf SolrDocument
<?php
// Angenommen, $doc ist ein SolrDocument aus einer Suchantwort
// Zugriff über Objekt-Eigenschaft
echo $doc->title . PHP_EOL;
// Zugriff wie auf ein Array (ArrayAccess)
echo $doc['title'] . PHP_EOL;
// Prüfen, ob ein Feld vorhanden ist
if (isset($doc['author'])) {
echo 'Autor vorhanden: ' . $doc['author'] . PHP_EOL;
}
// Alle Felder iterieren
foreach ($doc as $fieldName => $fieldValue) {
/** @var SolrDocumentField $fieldValue */
echo $fieldName . ': ';
// Ein Feld kann mehrere Werte haben
$values = $fieldValue->getValues();
if (is_array($values)) {
echo implode(', ', $values);
} else {
echo $values;
}
echo PHP_EOL;
}
// Feldnamen aller Felder ermitteln
$fieldNames = $doc->getFieldNames();
print_r($fieldNames);
?>
// Wichtig · Fallstricke
Voraussetzung: Die PECL-Erweiterung solr muss installiert und aktiviert sein (pecl install solr). Die Erweiterung ist nicht Bestandteil der PHP-Standardinstallation.
Lesezugriff: SolrDocument ist schreibgeschützt – Felder können nicht direkt gesetzt oder verändert werden. Zum Erstellen oder Aktualisieren von Dokumenten ist SolrInputDocument zu verwenden.
Mehrwertige Felder: Ein Feld in Solr kann mehrere Werte enthalten (z. B. Tags). In diesem Fall gibt getValues() auf dem entsprechenden SolrDocumentField-Objekt ein Array zurück. Beim direkten Zugriff über $doc->feldname wird das SolrDocumentField-Objekt zurückgegeben, nicht der rohe Wert.
Kompatibilität: Die verfügbaren Methoden und das Verhalten können je nach installierter Version der solr-Erweiterung leicht variieren. Es empfiehlt sich, stets die aktuellste stabile Version zu verwenden.