Schnell kommt man an den Punkt, an dem man Solr zusammen mit Kategorien bzw. Hierarchien als Facetten nutzen möchte. Die kurze Zusammenfassung meiner ersten Erfahrungen und Lösungswege:
Datenstruktur
Die zu kategorisierenden Datensätze müssen mittels System Kategorien (sys_category) gruppiert werden. Hierfür braucht gar nicht viel im TCA rumhantiert zu werden, da der TYPO3 Core das passende Hilfsmittel (ExtensionManagementUtility::makeCategorizable()) liefert .
Kategorien indizieren
Wie die Kategorie-Zuordnung mit indiziert wird, erklärt Steffen in seinem Blog-Beitrag „EXT:solr – Use categories as hierarchical facets„.
(Inzwischen ist „category“ als Feld in Solr vorhanden, sodass kein dynamisches Feld mehr nötig ist (category_stringM => category))
plugin.tx_solr.index { fieldProcessingInstructions { category = categoryUidToHierarchy } queue.MYTYPE.fields { category = SOLR_RELATION category { localField = categories foreignLabelField = uid multiValue = 1 } } }
Durch den Beitrag stößt man auch auf die Details der Implementierung, v.a. die Field Processors und den konkreten categoryUidToHierarchy (Classes/FieldProcessor/CategoryUidToHierarchy.php). Beim Blick in den Code wird klar, dass er nur mit Systemkategorien arbeitet.
Frontend-Ausgabe
Seit die Solr-Extension auf Fluidtemplates aufbaut, ist die Konfiguration der Facette vereinfacht (Früher war ein HMENU nötig):
plugin.tx_solr { search { faceting { facets { category { label = Category field = category type = hierarchy } } } } }
Damit nutzt Solr automatisch das Hierarchy-Partial, und man bekommt einem Baum aus Kategorie-UIDs und der Anzahl der enthaltenen Datensätze angezeigt.
Und die Kategorie-Titel? Dafür braucht es einen kleinen Kniff mit TypoScript und eine kleine Änderung am Fluid-Template.
Via TypoScript legen wir uns ein cObject bereit, das uns den Titel einer System-Kategorie ausgibt:
lib.tx_solr.sys_category_title = RECORDS lib.tx_solr.sys_category_title { source.current = 1 tables = sys_category dontCheckPid = 1 conf.sys_category = TEXT conf.sys_category.field = title conf.sys_category.htmlSpecialChars = 1 }
Im Hierarchy-Partial ersetzen wir in der Section ‚hierarchyTree‘ das {childNode.label} gegen:
<f:cObject typoscriptObjectPath="lib.tx_solr.sys_category_title">{childNode.label}</f:cObject>
Fertig!
Links
- Steffen Ritter’s blog: EXT:solr – Use categories as hierarchical facets (als PDF-Backup)
- TYPO3 Core APIs – Making a table categorizable
(Artikel basiert auf TYPO3 8.7.16 und EXT:solr 8.0.3)
Hi,
wie kann man denn die Kategorielabels in den Suchergebnissen abbilden lassen?
Also in \Resources\Private\Extensions\solr\Partials\Result\Document.html
Liebe Grüße
Hi Andi.
Vielleicht verstehe ich die Frage falsch, aber ist das nicht genau, was im letzten Teil des Artikels erklärt wird? Also via TypoScript-Objekt und der UID den sys_category-Record auslesen und die gewünschten Teile nutzen.