Atomic Updates in Solr 4
Bis zu der Solr Version 4.0 war das Aktualisieren eines Dokumentes ein recht „teurer“ Vorgang. Selbst wenn man nur einen einzelnen Wert, zum Beispiel, den Preis eines Produktes, austauschen wollte, musste man das komplette Dokument neu indexieren. Grund hierfür ist, dass beim ursprünglichen Update Mechanismus das zu aktualisierende Dokument im Index im ersten Schritt als gelöscht markiert wird und anschließend neu im Index angelegt wird. Mit Solr 4.x und dem Atomic Update Mechanismus ist es nun möglich einzelne Werte eines Dokumentes zu ändern, ohne das Dokument komplett neu zu indexieren.
How To Update
Im Inneren von Solr wird prinzipiell noch der gleiche Mechanismus angewandt, d.h. das zu aktualisierende Dokument wird neu hinzugefügt, jedoch erstellt Solr das neue Dokument selbst aus den bereits vorhandenen Informationen inklusive der Änderung, die durchgeführt werden soll. Es gibt drei verschiedene Update Möglichkeiten, die durch einen Modifier beim Indexieren spezifiziert werden. Für das Update muss neben dem zu ändernden Wert nur noch der Identifier des Dokumentes mitgeliefert werden. Folgende Modifier sind definiert:
- set – der bereits indexierte Wert wird mit dem neuen ersetzt
- add – der bereits existierende Wert wird um den neuen Wert erweitert; dies gilt für multiValued Felder
- inc – der bereits existierende Wert wird mit dem neuen Wert addiert, dies gilt für numerische Felder
Um ein Dokument aktualisieren zu können, benötigt man erst mal eines. Folgendes Beispiel eines Solr XML- Ausschnittes indexiert ein Dokument. Als Beispiel nehmen wir ein Getränk mit Preis, Titel und Beschreibung.
1 limonade eine flasche köstliche rote brause 1 |
Um einen Wert zu ersetzen, nutzt man den Modifier set. Das folgende Beispiel zeigt den XML-Ausschnitt, den man braucht, um die Aktulisierung durchzuführen.
1 rote brause |
Um den Preis zu erhöhen, könnte man den inc Modifier nutzen. Mit folgendem Beispiel wird der Preis um 1 erhöht.
1 1 |
Voraussetzungen
Es gibt ein paar Voraussetzungen, die erfüllt sein müssen, damit Atomic Updates funktionieren. Zum einen müssen alle Felder als „stored“ markiert sein, damit Solr das neue Dokument generieren kann. Dies gilt nicht für Felder, die über das CopyField-Statement befüllt werden. Diese Voraussetzung ist ein Stolperstein, über den man schnell fällt, da man gewillt ist so wenige Felder wie möglich mit ihrem originalen Inhalt abzuspeichern.
Eine weitere Voraussetzung ist das Update-Log. Dieses muss in der solrconfig.xml konfiguriert sein, da Solr nur so sicherstellen kann, dass die „letzte“ Version des Dokumentes aktualisiert wird.
Fazit
Atomic Updates sind dafür gedacht, „mal-eben-so-schnell“ einen Wert an einem Dokument zu ändern. Umsetzen kann man die Funktionalität recht leicht; es sind nur die wenigen Modifier notwendig, die bei der Indexierung benötigt werden.
Weiterführende Links
Newsletter
Anmelden |