nach oben
indoqa. IT-Experten, die Dinge zu nachhaltigen Lösungen entwickeln.

Solr Spatial Clustering Plugin (Distance-based)

Verfügen Daten in einem Solr Index über punktuelle geographische Informationen (zb. Längen- und Breitengrad), ist man oft mit der Aufgabenstellung konfrontiert, diese im Web oder am Mobilgerät als Pins auf einer Karte darzustellen und damit deren geographische Verteilung zu visualisieren.  Je nach Kartenausschnitt (Größe und Zoomstufe) ist die Anzahl an Pins, die gleichzeitig und trotzdem für den Benutzer übersichtlich angezeigt werden können, limitiert. Klassisches Paging ist hier nicht zielführend, da man damit keinen Überblick über die geographische Verteilung aller Treffer bekommt. Eine mögliche Lösung stellt der Ansatz des Spatial Clustering dar.

Spatial Clustering (oder auch Geo Clustering) beschreibt das Problem, die Pins für die Anzeige auf eine definierte Maximalanzahl zu reduzieren. Ein möglicher Ansatz ist das Distance-based Clustering. Dabei erfolgt die Clusterbildung durch das Zusammenfassen jener Treffer mit der geringsten Entfernung zueinander.

OpenSource
Indoqa stellt eine Implementierung von Distance-based Clustering als Solr Plugin zur Verfügung. Einfach die Konfiguration an Ihren Index anpassen und sofort ausprobieren!
Download Plugin von Github

Funktionsweise Distance-based Clustering

  1. Definition einer Maximalanzahl an Pins
  2. Ein Pin repräsentiert entweder ein Einzelergebnis  (Single-Pin) oder eine Gruppe von Ergebnissen (Cluster-Pin)
  3. Bei der Clusterbildung werden jene Ergebnisse zusammengeführt, die geographisch die geringste Entfernung zueinander aufweisen.
  4. Die Position eines Cluster-Pins auf der Karte wird durch den Mittelpunkt aller eingeschlossenen Treffer definiert.
  5. Ein Cluster-Pin liefert Information über die Anzahl der eingeschlossenen Treffer.
solr-spatial-clustering
Funktionsweise Solr Spatial Clustering

Nachteile client-seitiger Lösungen in Verbindung mit Apache Solr

Moderne Webframeworks bieten bereits Funktionen, das Clustering vor der Anzeige direkt am client durchzuführen (siehe zb. Google Maps für Android). Der Nachteil dieser Lösung ist jedoch, dass für einen Kartenausschnitt als Input die Basisdaten für die Pins (ID, Name, Längen- und Breitengrad) aller möglichen Ergebnisse  am Client verfügbar sein müssen. Liegt die Menge der Suchergebnisse deutlich über der gewünschten Maximalanzahl der Pins, wirkt sich das in mehreren Punkten negativ auf die Performance der Applikation aus:

  • Die Solr Abfrage selbst wird langsamer, da kein Paging möglich ist.
  • Es müssen deutlich mehr Daten durch das System an den Client gesendet werden.
  • Die rechenintensive Durchführung der Clusterbildung erfolgt nicht in der Solr Server Infrastruktur sondern direkt am Client. Hier sind z.b. Browser und deren Javascript Implementierungen deutlich im Nachteil.
Benötigen Sie professionelle Unterstützung oder haben Sie konkrete Fragen zu Solr? Indoqa bietet Solr Consulting auf Basis jahrelanger Erfahrung in Analyse, Planung und Umsetzung von Suchanwendungen.
Indoqa Solr Experten kontaktieren

Email

Nachricht

Spatial Clustering für Solr

Das Indoqa Spatial Clustering Plugin für Solr bietet eine Implementierung für Distance-based Spatial Clustering, bei der die Clusterbildung bereits on query time während der Suchabfrage durchgeführt werden kann. Dabei werden die Pins zusätzlich zu der Standardergebnisrepräsentation als Facette ausgegeben. Jegliche Kombination von Kartendarstellung und klassischer Listenansicht der Ergebnisse ist dadurch mit einer Abfrage möglich.

Konfiguration

Es müssen lediglich jene Felder im Dokument definiert werden, die Inforationen über die ID bzw. Längen- und Breitengrad des Dokuments beinhalten:

<searchComponent class="com.indoqa.solr.spatialclustering.SpatialClusteringComponent" name="spatial-clustering">
  <str name="fieldId">id</str>
  <str name="fieldLon">longitude</str>
  <str name="fieldLat">latitude</str>
</searchComponent>

<requestHandler name="search" class="solr.SearchHandler" default="true">
  <arr name="last-components">
    <str>spatial-clustering</str>
  </arr>
</requestHandler>
Aufrufparameter
ParametererforderlichDefault-WertBeschreibung
spatial-clusteringjafalseAktiviert Geo Clustering
spatial-clustering.sizenein10Maximalanzahl der Pins
Ergebnis

Im Ergebnis wird der Knoten <spatial-clustering> hinzugefügt, dieser liefert die Liste der gewünschten Pins. Single-Pins beinhalten eine Referenz auf die ID des dargestellten Dokuments, Cluster-Pins die Anzahl der eingeschlossenen Treffer:

<lst name="spatial-clustering">
  <lst name="pin">
    <str name="type">single</str>
    <int name="size">1</int>
    <double name="longitude">16.345518</double>
    <double name="latitude">48.285202</double>
    <string name="reference">document-2313</string>
  </lst>
  <lst name="pin">
    <str name="type">cluster</str>
    <int name="size">3</int>
    <double name="longitude">16.2461115932</double>
    <double name="latitude">48.20259082573333</double>
  </lst>
  ...
  ...
</lst>
Like it? Share it!

Leave a Reply

Your email address will not be published. Required fields are marked *