Start · Sprachen · PHP · Referenz · SolrDocument

SolrDocument

Klasse

Stellt ein aus einer Solr-Abfrageantwort abgerufenes Dokument dar und bietet Zugriff auf dessen Felder und Werte.

seit PHP 0.9.2 Kategorie: db

Signatur

class SolrDocument implements ArrayAccess, Iterator, Serializable

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

Typ

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;
}
?>
ID: 42 Titel: PHP Handbuch Autor: Max Mustermann --- ID: 43 Titel: PHP und Solr Autor: Erika Musterfrau ---

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);
?>
PHP Handbuch PHP Handbuch Autor vorhanden: Max Mustermann id: 42 title: PHP Handbuch author: Max Mustermann Array ( [0] => id [1] => title [2] => author )

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