Signatur
Beschreibung
SolrUtils ist eine Utility-Klasse der PHP-Solr-Erweiterung (ext/solr) und enthält ausschließlich statische Methoden. Sie kann nicht instanziiert werden. Die Klasse dient als Werkzeugkasten für häufig benötigte Hilfsoperationen rund um Apache Solr.
Zu den wichtigsten Aufgaben gehören das Escapen von Sonderzeichen in Solr-Abfragen (SolrUtils::escapeQueryChars()), das Einschließen von Phrasen in Anführungszeichen (SolrUtils::queryPhrase()), die Konvertierung zwischen Lucene-Datumsformaten und Unix-Timestamps sowie das Abrufen der installierten Erweiterungsversion.
Besonders wichtig ist die Escape-Funktion: Ohne korrekte Maskierung können Sonderzeichen wie +, -, &&, ||, !, (, ), {, }, [, ], ^, ", ~, *, ?, : und \ die Abfragesyntax von Solr ungewollt beeinflussen oder zu Fehlern führen.
Die Klasse ist final und kann weder erweitert noch instanziiert werden. Alle Methoden werden direkt über den Klassennamen aufgerufen.
Beispiele
Sonderzeichen in einer Solr-Abfrage escapen
<?php
// Benutzereingabe, die Sonderzeichen enthält
$userInput = 'C++ & Java (oder PHP)?';
// Sonderzeichen maskieren, bevor der String in eine Solr-Abfrage einfließt
$escaped = SolrUtils::escapeQueryChars($userInput);
echo $escaped;
// Ausgabe: C\+\+\ \&\ Java\ \(oder\ PHP\)\?
Suchphrase in Anführungszeichen einschließen
<?php
// Phrasensuche: mehrere Wörter als exakte Phrase suchen
$phrase = 'Apache Solr ist toll';
$quotedPhrase = SolrUtils::queryPhrase($phrase);
echo $quotedPhrase;
// Ausgabe: "Apache Solr ist toll"
// Kann direkt als Abfrageparameter verwendet werden
$client = new SolrClient([
'hostname' => 'localhost',
'port' => 8983,
'path' => '/solr/mycore',
]);
$query = new SolrQuery();
$query->setQuery($quotedPhrase);
$response = $client->query($query);
Erweiterungsversion und Solr-Spezifikationsversion abrufen
<?php
// Gibt ein Array mit Versions-Informationen zurück
$versionInfo = SolrUtils::getSolrVersion();
echo 'PHP-Erweiterung: ' . $versionInfo['php_binding_version'] . PHP_EOL;
echo 'Apache Solr Spec: ' . $versionInfo['apache_solr_spec_version'] . PHP_EOL;
Unix-Timestamp in Lucene-Datumsformat konvertieren
<?php
// Aktuellen Zeitstempel in das Solr/Lucene-ISO-8601-Format umwandeln
$timestamp = mktime(12, 0, 0, 6, 15, 2024);
$luceneDate = SolrUtils::getSolrDate($timestamp);
echo $luceneDate;
// Ausgabe (abhängig von der Zeitzone): 2024-06-15T12:00:00.000Z
// Wichtig · Fallstricke
Sicherheitshinweis: Benutzereingaben sollten immer mit SolrUtils::escapeQueryChars() bereinigt werden, bevor sie in eine Solr-Abfrage eingefügt werden. Andernfalls kann ein Angreifer die Abfragelogik manipulieren (Solr Query Injection), unbeabsichtigt große Ergebnismengen abrufen oder die Performance des Servers beeinträchtigen.
Nur statische Methoden: Die Klasse ist als final deklariert und kann weder instanziiert noch erweitert werden. Der Versuch, new SolrUtils() aufzurufen, führt zu einem Fehler.
Erfordert ext/solr: Die Klasse ist Teil der PECL-Erweiterung ext/solr und ist nicht in einer Standard-PHP-Installation enthalten. Sie muss über PECL installiert werden (pecl install solr).