Was nützen einem die besten Inhalte, wenn sie keiner findet? Oder die Suche auf der eigenen Webseite keine relevanten Treffer liefert? Noch dazu ewig lädt? Nichts.

Solr kann hier Abhilfe schaffen.

Solr Kurzbeschreibung

Solr ist eine Open-Source Such-Plattform, die auf Apache Lucene aufbaut. Dank der Plugin Architektur ist sie einfach erweiterbar und bietet eine Menge Features. Hier ein paar Beispiele:

  • Facettensuche und Suchfilter
  • Suchergebnis-Gruppierung
  • Geo-Index
  • Suggestions
  • Spracherkennung
  • Rich Document Parsing (PDF, Word) mit Apache Tika
  • JSON, CSV, XML Parser

Die Kommunikation erfolgt via HTTP und ist somit für viele Applikationen leicht anzubinden. Eine sehr ausführliche Dokumentation ist hier zu finden: Apache Solr Reference Guide

Indexieren

Daten werden via HTTP POST an den Index übertragen. Mittels curl lässt sich das Indexieren sehr einfach testen. Hier 2 Beispiele aus der Dokumentation:

XML Index Update

curl http://localhost:8983/solr/my_collection/update -H "Content-Type: text/xml" --data-binary '
<add>
 <doc>
 <field name="authors">Patrick Eagar</field>
 <field name="subject">Sports</field>
 <field name="dd">796.35</field>
 <field name="numpages">128</field>
 <field name="desc"></field>
 <field name="price">12.40</field>
 <field name="title" boost="2.0">Summer of the all-rounder: Test and championship cricket in England 1982</field>
 <field name="isbn">0002166313</field>
 <field name="yearpub">1982</field>
 <field name="publisher">Collins</field>
 </doc>
</add>

JSON Index Update

curl -X POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/my_collection/update/json/docs' --data-binary '
{
  "id": "1",
  "title": "Doc 1"
}'

Ein tieferes Eintauchen in die Indexierung von strukturierten und unstrukturierten Daten lasse ich an dieser Stelle bewusst weg, da es den Rahmen dieser Kurzbeschreibung sprengen würde. Details sind im Abschnitt Indexing and Basic Data Operations zu erfahren.

De-Indexieren

Um Daten aus dem Index zu entfernen, sendet man ein Update-Statement mit Delete-Anweisung.
Man kann einzelne oder auch mehrere IDs angeben:

curl -X POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/my_collection/update/json/docs' --data-binary 
{ "delete":"1" }
curl -X POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/my_collection/update/json/docs' --data-binary 
{ "delete":["id1","id2"] }

Suchen

Suchergebnisse erhält man über HTTP GET queries. Die einfachste Form ist das Anhängen des q-Parameters mit dem gewünschten Suchterm:

http://localhost:8983/solr/my_collection/select?q=Patrick
<?xml version="1.0" encoding="UTF-8"?>
<response>
<responseHeader><status>0</status><QTime>1</QTime></responseHeader>
<result numFound="1" start="0">
 <doc>
 <field name="authors">Patrick Eagar</field>
 <field name="subject">Sports</field>
 <field name="dd">796.35</field>
 <field name="numpages">128</field>
 <field name="desc"></field>
 <field name="price">12.40</field>
 <field name="title" boost="2.0">Summer of the all-rounder: Test and championship cricket in England 1982</field>
 <field name="isbn">0002166313</field>
 <field name="yearpub">1982</field>
 <field name="publisher">Collins</field>
 </doc>
</result>
</response>

Komplexere Abfragen und Beschreibungen zu unterschiedlichen Query Parsern sind hier verfügbar: Query Syntax Parsing

Index-Update mit imperia CMS

Mit einem Content Management System wie imperia CMS kann man Inhalte sehr einfach erstellen, da wäre es doch perfekt dieses direkt an Solr anzubinden.

Ziel ist es, den Suchindex bei Datenänderung sofort zu aktualisieren.

Oft wird ein Suchindex über Cronjobs aufgebaut, was den Nachteil hat, dass Deadlinks entstehen können oder Artikel erst sehr viel später durchsuchbar sind. Zudem belastet es Systeme meistens unnötig, wenn der Index nicht inkrementell aktualisiert, sondern der Holzhammer ausgepackt wird.

Um den Solr-Index nur bei Datenänderung zu aktualisieren, bietet sich die MessageCheck-Schnittstelle von imperia an. MessageCheck Plugins erhalten sogenannte Notifications über Statusänderungen an imperia Dokumenten. Dies beinhaltet das Erstellen, Updaten und Löschen von Inhalten.

Architektur Diagramm

Der Aufbau der einzelnen Komponenten sieht wie folgt aus:

imperiaCMS Solr

Indexieren

  1. Der Redakteur erstellt neuen Content
  2. Das MessageCheck Plugin „Solr“ bekommt bei Publikation eine .free-Notification
  3. Es ruft in Project::Search::Solr die index-Funktion auf
  4. Das Dokument wird auf angehangene Assets untersucht, die ggf. an den Index gesendet werden
  5. Das Dokument selbst wird in XML umgewandelt und via HTTP POST an Solr gesendet

De-Indexieren

  1. Der Redakteur löscht ein imperia-Dokument
  2. Das MessageCheck Plugin „Solr“ bekommt bei Depublikation eine .deleted-Notification
  3. Es ruft in Project::Search::Solr die deindex-Funktion auf
  4. Ein HTTP POST zum Entfernen des Dokuments aus dem Index wird an Solr gesendet

Das Löschen von Assets aus dem MAM erzeugt eigene Notifications. Aus diesem Grund muss bei Depublikation von imperia CMS Dokumenten keine Rücksicht auf Referenzen genommen werden.

Fazit

Mit Solr erhält man einen kostenlosen, umfangreichen und einfach anzubindenden Application-Server. Die Suchfunktionen sind mächtig und mit der Cloud-Funktionalität hoch skalierbar.

Die Verknüpfung zwischen imperia CMS und Solr basiert rein auf HTTP und ist sehr variabel an Kundenbedürfnisse anpassbar. Man erhält eine dynamische Komponente zu der statischen Auslieferung von imperia CMS Content.

Ein weiterer Vorteil besteht darin, dass Drittsysteme sich sehr einfach an den CMS Daten bedienen können.

Bei Fragen und Anmerkungen würde ich mich über Kommentare sehr freuen.

Bitte bewerten Sie meinen Beitrag:
grauenhafteinfach nur schlechtich habe es geschafft ohne einzuschlafengut ist gut genugsehr gut, bitte mehr davon (bewerten Sie als erster)
Loading...