Start · Sprachen · PHP · Referenz · SolrInputDocument

SolrInputDocument

Klasse

Repräsentiert ein Solr-Dokument, das Felder und Werte enthält und an einen Apache-Solr-Index zur Indexierung übermittelt werden kann.

seit PHP 0.9.2 Kategorie: db

Signatur

class SolrInputDocument

Beschreibung

SolrInputDocument ist die zentrale Klasse der PECL-Solr-Erweiterung, um Dokumente für die Indexierung in Apache Solr vorzubereiten. Ein Solr-Dokument besteht aus einer Sammlung von benannten Feldern mit zugehörigen Werten und optionalen Boost-Faktoren.

Felder werden mit der Methode addField() hinzugefügt. Mehrwertige Felder (Multi-Valued Fields) werden durch mehrfaches Aufrufen von addField() mit demselben Feldnamen befüllt. Jedes Feld kann zudem einen individuellen Boost-Faktor erhalten, der die Relevanzbewertung im Suchindex beeinflusst.

Fertig erstellte SolrInputDocument-Instanzen werden über ein SolrClient-Objekt mittels addDocument() oder addDocuments() an den Solr-Server gesendet. Die Klasse unterstützt außerdem das Zusammenführen mehrerer Dokumente über merge() sowie das Sortieren der Felder mit sort().

Diese Klasse eignet sich hervorragend für Batch-Indexierungen, da mehrere Dokumente gesammelt und als Array an SolrClient::addDocuments() übergeben werden können, was die Netzwerklast gegenüber einzelnen Anfragen deutlich reduziert.

Beispiele

Einfaches Dokument erstellen und indexieren

<?php
// Verbindung zum Solr-Server aufbauen
$options = [
    'hostname' => 'localhost',
    'port'     => 8983,
    'path'     => '/solr/mycore',
];
$client = new SolrClient($options);

// Neues Eingabedokument erstellen
$doc = new SolrInputDocument();

// Felder hinzufügen
$doc->addField('id', '42');
$doc->addField('title', 'PHP und Apache Solr');
$doc->addField('author', 'Max Mustermann');
$doc->addField('category', 'PHP');
$doc->addField('category', 'Datenbanken'); // Mehrwertiges Feld

// Optionaler Boost für das gesamte Dokument
$doc->setBoost(1.5);

// Dokument an Solr senden
$updateResponse = $client->addDocument($doc);

// Änderungen committen
$client->commit();

echo 'Dokument erfolgreich indexiert.';
?>
Dokument erfolgreich indexiert.

Mehrere Dokumente als Batch indexieren

<?php
$options = [
    'hostname' => 'localhost',
    'port'     => 8983,
    'path'     => '/solr/mycore',
];
$client = new SolrClient($options);

$dokumente = [
    ['id' => '1', 'title' => 'Einführung in PHP',   'tags' => ['php', 'programmierung']],
    ['id' => '2', 'title' => 'Solr für Einsteiger', 'tags' => ['solr', 'suche']],
    ['id' => '3', 'title' => 'MySQL Grundlagen',    'tags' => ['mysql', 'datenbank']],
];

$solrDocs = [];
foreach ($dokumente as $data) {
    $doc = new SolrInputDocument();
    $doc->addField('id', $data['id']);
    $doc->addField('title', $data['title']);
    foreach ($data['tags'] as $tag) {
        $doc->addField('tags', $tag);
    }
    $solrDocs[] = $doc;
}

// Alle Dokumente auf einmal senden (effizienter als Einzelanfragen)
$client->addDocuments($solrDocs);
$client->commit();

echo count($solrDocs) . ' Dokumente erfolgreich indexiert.';
?>
3 Dokumente erfolgreich indexiert.

Felder auslesen, prüfen und Dokumente zusammenführen

<?php
$doc1 = new SolrInputDocument();
$doc1->addField('id', '10');
$doc1->addField('title', 'Originaldokument');
$doc1->addField('price', 29.99);

$doc2 = new SolrInputDocument();
$doc2->addField('description', 'Ergänzende Beschreibung');
$doc2->addField('stock', 100);

// doc2 in doc1 zusammenführen (merge)
$doc1->merge($doc2);

// Felder alphabetisch sortieren
$doc1->sort(SolrInputDocument::SORT_FIELD_NAME, SolrInputDocument::SORT_ASC);

// Alle Felder auslesen
$fields = $doc1->getFieldNames();
echo 'Felder im Dokument: ' . implode(', ', $fields) . PHP_EOL;

// Einzelnes Feld abfragen
if ($doc1->fieldExists('price')) {
    $priceField = $doc1->getField('price');
    echo 'Preis: ' . $priceField['values'][0] . PHP_EOL;
}

// Feldanzahl
echo 'Anzahl Felder: ' . $doc1->getFieldCount() . PHP_EOL;
?>
Felder im Dokument: description, id, price, stock, title Preis: 29.99 Anzahl Felder: 5

// Wichtig · Fallstricke

Boost-Faktoren: Die dokumentenweite Boost-Methode setBoost() sowie feldspezifische Boosts (dritter Parameter von addField()) sind seit Solr 7.x als veraltet markiert und in neueren Solr-Versionen möglicherweise nicht mehr wirksam. Bevorzuge stattdessen Query-Time-Boosting.

Pflichtfeld id: Solr erwartet standardmäßig ein eindeutiges Feld (meist id). Fehlt es, schlägt die Indexierung fehl oder überschreibt ungewollt bestehende Dokumente.

Zeichenkodierung: Alle Zeichenketten sollten UTF-8-kodiert sein, da Solr standardmäßig UTF-8 verwendet. Falsch kodierte Daten führen zu Indexierungsfehlern.

Commit nicht vergessen: Hinzugefügte Dokumente sind erst nach einem expliziten SolrClient::commit() oder einem konfigurierten Auto-Commit in Solr suchbar.