Bild-Schulung-Solr-in-a-Nutshell

Document Routing in SolrCloud

Daniel Wrigley

Abstract

In Solr 4.1 sind einige Neuerungen und Verbesserungen eingebaut worden.
Dieser Beitrag stellt vor, wie man die Platzierung von einem Dokument in einem bestimmten Shard mit Hilfe eines Präfixes in der Dokument-ID steuern kann.

Einführung

Ab Version 4.1 ist in Solr die Möglichkeit hinzugekommen, indirekt Einfluss darauf zu nehmen, wie bzw. wohin Dokumente indexiert werden.
Hierzu sind zwei Document Routing Strategien vorhanden:

  • “compositeId” Router: Diese Routing Strategie wird genutzt, wenn der numShards Parameter verwendet wird. Dies erlaubt es Dokumente an Solr zu schicken, die ein Präfix in der Dokumenten-ID haben. Dieses Präfix wird dann dazu benutzt einen Hash-Wert zu berechnen, anhand dessen der Shard ermittelt wird, an den das Dokument zur Indexierung gesendet wird.
  • “implicit” Router: Fehlt der numShards Parameter, übernimmt Solr das Document Routing, indem nur aus der Dokumenten-ID ein Hashwert berechnet wird, anhand dessen dann der Shard berechnet, in dem das Dokument indexiert werden soll.

Verwendung

Diese Technologie kann dazu verwendet werden, Dokumente gleicher Sprache an einen Shard zu schicken oder Dokumente eines Kunden „nebeneinander“ zu platzieren.
Wenn nun bei der Suche die vergebenen Präfixe/das vergebene Präfix als shard.keys Parameter angegeben werden, wird die Suche auf diesen Shard/diese Shards begrenzt, was zu einer Verbesserung der QueryTime-Performance führen kann.

Beispiel

Präfix-Vergabe:

user_specific_prefix!1234567890

Das Präfix kann frei gewählt werden: Es kann ein Kundenname sein, ein Sprachkürzel etc.
Query: Um auf die Dokumente nun zuzugreifen, verwendet man einfach das vergebene Präfix (bzw. die vergebenen Präfixe) im shard.keys Parameter:

q=any product&shard.keys=user_specific_prefix!

Fazit

Während einiges in der SolrCloud wie Magie erscheint, stellt Apache hier eine einfache Möglichkeit bereit, Dokumente “nebeneinander” (also in den gleichen Shard) zu legen, wenn man die verteilte Indexierung nicht vollständig dem System überlassen will.

Weiterführende Links