Start · Sprachen · PHP · Referenz · SolrClient

SolrClient

Klasse

Sendet Anfragen an einen Apache Solr-Server (Indizierung, Suche, Updates); Klonen und Serialisieren von Instanzen wird nicht unterstützt.

seit PHP 0.9.2 Kategorie: db

Signatur

class SolrClient

Beschreibung

SolrClient ist die zentrale Klasse der PECL-Erweiterung solr und kapselt die HTTP-Kommunikation mit einem Apache Solr-Server. Über eine einzige Instanz lassen sich Dokumente hinzufügen, aktualisieren, löschen sowie Volltextsuchen und facettierte Abfragen ausführen.

Die Verbindungsparameter (Host, Port, Pfad, Authentifizierung, Timeout usw.) werden beim Erstellen der Instanz über ein assoziatives Array übergeben. Die Klasse verwendet intern libcurl, um die Requests als HTTP-POST oder HTTP-GET abzusetzen. Alle Antworten werden als SolrQueryResponse-, SolrUpdateResponse- oder SolrGenericResponse-Objekte zurückgegeben.

Wichtige Einschränkungen: Das Klonen (clone $client) und das Serialisieren (serialize() / unserialize()) von SolrClient-Instanzen werden ausdrücklich nicht unterstützt und führen zu einem Fehler. Für lang laufende Prozesse empfiehlt sich daher das Halten exakt einer Instanz pro Request.

Die Erweiterung ist für PHP 5 und PHP 7/8 verfügbar und muss über PECL installiert werden (pecl install solr). Sie setzt einen laufenden Apache Solr-Server (ab Version 1.3) voraus.

Parameter

Name Typ Default Beschreibung
$clientOptions Pflicht array Assoziatives Array mit Verbindungsoptionen. Mögliche Schlüssel: hostname (Standard: localhost), login, password, port (Standard: 8983), path (Standard: /solr), wt (Antwortformat, Standard: xml), secure (bool, HTTPS), timeout, ssl_cert, ssl_key, ssl_cainfo, ssl_capath, proxy_host, proxy_port, proxy_login, proxy_password.

Beispiele

Verbindung herstellen und ein Dokument indizieren

<?php
// Verbindungsparameter
$options = [
    'hostname' => 'localhost',
    'port'     => 8983,
    'path'     => '/solr/mycore',
];

$client = new SolrClient($options);

// Neues Solr-Dokument erstellen
$doc = new SolrInputDocument();
$doc->addField('id',    '42');
$doc->addField('title', 'PHP und Apache Solr');
$doc->addField('author', 'Max Mustermann');
$doc->addField('price',  29.99);

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

// Änderungen permanent machen
$client->commit();

echo 'Dokument erfolgreich indiziert.' . PHP_EOL;
print_r($updateResponse->getResponse());
Dokument erfolgreich indiziert.

Volltextsuche ausführen und Ergebnisse auswerten

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

$client = new SolrClient($options);

// Suchanfrage aufbauen
$query = new SolrQuery();
$query->setQuery('PHP');
$query->setStart(0);
$query->setRows(10);
$query->addField('id')->addField('title')->addField('author');

// Anfrage senden
$queryResponse = $client->query($query);

// Antwort auswerten
$response = $queryResponse->getResponse();
$numFound = $response->response->numFound;

echo "Treffer: {$numFound}" . PHP_EOL;

foreach ($response->response->docs as $doc) {
    echo '[' . $doc->id . '] ' . $doc->title . ' — ' . $doc->author . PHP_EOL;
}
Treffer: 1 [42] PHP und Apache Solr — Max Mustermann

Dokument löschen und Core optimieren

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

$client = new SolrClient($options);

// Einzelnes Dokument nach ID löschen
$client->deleteById('42');

// Alle Dokumente eines Autors löschen
$client->deleteByQuery('author:"Max Mustermann"');

// Änderungen bestätigen
$client->commit();

// Index optimieren (zeitintensiv, selten aufrufen)
$client->optimize();

echo 'Dokument gelöscht und Index optimiert.' . PHP_EOL;
Dokument gelöscht und Index optimiert.

// Wichtig · Fallstricke

Klonen und Serialisieren nicht unterstützt: Der Versuch, eine SolrClient-Instanz zu klonen (clone) oder zu serialisieren (serialize()), wirft eine SolrIllegalOperationException. Instanzen dürfen daher nicht in Sessions oder Caches gespeichert werden.

Fehlerbehandlung: Netzwerk- oder Serverfehler werden als SolrClientException geworfen; fehlerhafte Anfragen oder Serverantworten als SolrServerException. Beide sollten immer mit try/catch abgefangen werden.

Authentifizierung: Bei passwortgeschützten Solr-Instanzen die Optionen login und password übergeben. Für HTTPS secure => true setzen und ggf. SSL-Zertifikatspfade angeben.

Performance: Mehrere Dokumente sollten gebündelt mit addDocuments() (Array von SolrInputDocument-Objekten) statt in einer Schleife mit einzelnen addDocument()-Aufrufen gesendet werden, um den HTTP-Overhead zu minimieren.