Start · Sprachen · PHP · Referenz · SolrDocumentField

SolrDocumentField

Klasse

Repräsentiert ein einzelnes Feld in einem <code>SolrDocument</code> und stellt seinen Namen, Boost-Wert und alle Feldwerte als schreibgeschützte Eigenschaften bereit.

seit PHP 0.9.2 Kategorie: db

Signatur

class SolrDocumentField

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;
}
Feldname : title Boost : 0 Werte : Mein erster Artikel

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;
}
Fehler: This field is read-only.

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