Start · Sprachen · PHP · Referenz · SolrCollapseFunction

SolrCollapseFunction

Klasse

Repräsentiert eine Collapse-Funktion für Apache Solr-Abfragen und ermöglicht das Zusammenfassen von Dokumenten nach einem bestimmten Feld.

seit PHP 2.2.0 Kategorie: db

Signatur

class SolrCollapseFunction

Beschreibung

SolrCollapseFunction ist Teil der PHP-Solr-Erweiterung und bildet die Solr-CollapsingQParser-Funktion ab. Mit ihr lassen sich Suchergebnisse auf Dokumentgruppen reduzieren, wobei aus jeder Gruppe nur ein repräsentatives Dokument zurückgegeben wird – etwa das Dokument mit dem höchsten Score oder einem bestimmten Feldwert.

Typische Anwendungsfälle sind Produktkataloge, bei denen pro Produktgruppe nur das günstigste oder relevanteste Ergebnis angezeigt werden soll. Das Collapse-Feld muss ein einwertiges, indiziertes Feld vom Typ int, float oder string sein.

Die erzeugte Funktion wird über SolrQuery::setCollapse() an eine Solr-Abfrage übergeben. Die interne Darstellung der Funktion entspricht der Solr-Syntax {!collapse field=... ...} und wird beim Senden der Anfrage automatisch serialisiert.

Neben dem Pflichtfeld können optionale Parameter wie min, max, nullPolicy und hint gesetzt werden, um das Verhalten beim Zusammenfassen zu steuern.

Parameter

Name Typ Default Beschreibung
$field Pflicht string Der Name des Solr-Feldes, nach dem die Dokumente zusammengefasst werden sollen. Muss ein einwertiges, indiziertes Feld sein.

Beispiele

Einfaches Collapsing nach einem Kategoriefeld

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

// Solr-Abfrage erstellen
$query = new SolrQuery('*:*');
$query->setRows(10);

// Collapse-Funktion: Pro Kategorie nur ein Dokument zurückgeben
$collapse = new SolrCollapseFunction('category_id');

// An die Abfrage übergeben
$query->setCollapse($collapse);

$response = $client->query($query);
$result = $response->getResponse();

echo 'Anzahl Gruppen: ' . $result['response']['numFound'] . PHP_EOL;
Anzahl Gruppen: 5

Collapsing mit Min-Score und NullPolicy

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

$query = new SolrQuery('*:*');
$query->setRows(20);

// Collapse-Funktion: Pro Marke das Dokument mit dem günstigsten Preis behalten
$collapse = new SolrCollapseFunction('brand_id');

// Dokument mit dem kleinsten Preis je Gruppe auswählen
$collapse->setMin('price');

// Dokumente ohne Wert im Collapse-Feld trotzdem einbeziehen
$collapse->setNullPolicy(SolrCollapseFunction::NULLPOLICY_EXPAND);

// Hint für bessere Performance bei großen Ergebnismengen
$collapse->setHint(SolrCollapseFunction::HINT_TOP_FC);

$query->setCollapse($collapse);

echo (string) $collapse; // Gibt die Solr-Syntax aus
{!collapse field=brand_id min=price nullPolicy=expand hint=top_fc}

// Wichtig · Fallstricke

Voraussetzung: Die PHP-Solr-Erweiterung (pecl/solr) ab Version 2.2.0 sowie ein laufendes Apache Solr mit aktiviertem CollapsingQParserPlugin sind erforderlich.

Feldtypen: Das Collapse-Feld muss ein einwertiges Feld sein. Multivalued Fields werden nicht unterstützt und führen zu Fehlern auf der Solr-Seite.

Performance: Bei sehr großen Indizes empfiehlt sich die Verwendung von setHint(SolrCollapseFunction::HINT_TOP_FC), um den Field-Cache zu nutzen und die Abfragegeschwindigkeit zu verbessern.

Die Klasse stellt folgende Klassen-Konstanten bereit: SolrCollapseFunction::NULLPOLICY_IGNORE, SolrCollapseFunction::NULLPOLICY_EXPAND und SolrCollapseFunction::NULLPOLICY_COLLAPSE für den Umgang mit Dokumenten ohne Feldwert, sowie SolrCollapseFunction::HINT_TOP_FC als Performance-Hinweis.