Signatur
Beschreibung
SolrDocumentField ist eine Klasse der PECL-Solr-Erweiterung und kapselt ein einzelnes Feld eines Apache-Solr-Dokuments. Instanzen dieser Klasse entstehen automatisch, wenn auf ein Feld eines SolrDocument-Objekts zugegriffen wird — sie werden nicht manuell instanziiert.
Jede Instanz besitzt drei schreibgeschützte (readonly) Eigenschaften: name enthält den Feldnamen, boost den Boost-Faktor (Gleitkommazahl) und values ein Array aller dem Feld zugeordneten Werte (Solr unterstützt mehrwertige Felder). Der Versuch, diese Eigenschaften zu setzen, löst eine SolrIllegalOperationException aus.
Die Klasse ist besonders nützlich, wenn man Ergebnisse einer Solr-Suchanfrage iteriert und auf die genauen Feldwerte sowie deren Boost-Werte zugreifen möchte. Da SolrDocumentField kein Interface implementiert, das über ArrayAccess oder Traversable hinausgeht, wird üblicherweise direkt über ->values iteriert.
Beispiele
Zugriff auf ein SolrDocumentField aus einem SolrDocument
<?php
// Verbindung zu einem lokalen Solr-Server herstellen
$options = [
'hostname' => 'localhost',
'port' => 8983,
'path' => '/solr/mycore',
];
$client = new SolrClient($options);
$query = new SolrQuery();
$query->setQuery('*:*');
$query->setRows(1);
$response = $client->query($query);
$result = $response->getResponse();
/** @var SolrDocument $doc */
$doc = $result['response']['docs'][0];
// Feldname 'title' als SolrDocumentField abrufen
$field = $doc->getField('title');
if ($field instanceof SolrDocumentField) {
echo 'Feldname : ' . $field->name . PHP_EOL;
echo 'Boost : ' . $field->boost . PHP_EOL;
echo 'Werte : ' . implode(', ', $field->values) . PHP_EOL;
}
Schreibgeschützte Eigenschaft — Ausnahme abfangen
<?php
$options = [
'hostname' => 'localhost',
'port' => 8983,
'path' => '/solr/mycore',
];
$client = new SolrClient($options);
$query = new SolrQuery('*:*');
$query->setRows(1);
$response = $client->query($query);
$result = $response->getResponse();
/** @var SolrDocument $doc */
$doc = $result['response']['docs'][0];
$field = $doc->getField('title');
try {
// Versuch, eine schreibgeschützte Eigenschaft zu setzen
$field->name = 'andererName';
} catch (SolrIllegalOperationException $e) {
echo 'Fehler: ' . $e->getMessage() . PHP_EOL;
}
// Wichtig · Fallstricke
Schreibschutz: Alle drei Eigenschaften (name, boost, values) sind schreibgeschützt. Jeder Schreibversuch wirft eine SolrIllegalOperationException.
Mehrwertige Felder: values ist stets ein Array — auch wenn das Feld nur einen einzigen Wert enthält. Code sollte immer über values iterieren, anstatt direkt auf Index 0 zuzugreifen, ohne die Array-Länge zu prüfen.
Voraussetzung: Die PECL-Erweiterung solr muss installiert und aktiviert sein (pecl install solr). Die Klasse ist nicht im PHP-Kern enthalten.