Suche verstehen
Wir helfen Ihnen dabei, die Such­anfragen Ihrer Kund*innen und Mit­ar­bei­­ter*innen zu ver­stehen und schnell re­le­vante Ergebnisse zu liefern.

Fallbeispiel Geosuche mit Apache Solr

Im Artikel “Solr Geospatial – 3 Schritte zur flexiblen Geosuche” haben wir einen technischen Ansatz beschrieben, der die Basis für unterschiedliche geographische Selektionen liefert. Darauf aufbauend soll dieses Fallbeispiel die detaillierten Möglichkeiten und Operationen der Geosuche mit Apache Solr aufzeigen.

Ausgangslage

Als Datenbasis verwenden wir für Touristen interessante Orte im Raum Wien. Diese sollen auf einer Karte darstellen werden und durchsucht werden können. Die Sehenswürdigkeiten verfügen jeweils über geographische Informationen. Dabei handelt es sich um

  • Point of Interests (z.B. Schloss Schönbrunn). Können als punktuelle Marker auf der Karte dargestellt werden.
  • Panoramastrecken (z.B. Höhenstraße). Werden als Linie entlang des Straßenverlaufs dargestellt.
  • Erholungsgebiete (z.B. Lainzer Tiergarten). Werden als semi-transparente Fläche dargestellt.
Geosuche_Solr_Fallbeispiel_Ausgangslage

Fallbeispiel Geosuche mit Solr: Datentypen

Zum Indizieren der Daten folgt man Schritt 1 und 2 unserer Anleitung. Danach stehen die geographischen Informationen optimiert im Feld locations zur Verfügung und sind bereit zur Selektion.

Suche nach Treffern innerhalb eines Kartenausschnitts

Ein häufiger Anwendungsfall ist die Suche innerhalb eines Kartenausschnitts. Wie im Schritt 3 beschrieben, bestehen die Abfragen immer aus einer Geometrie (Punkt, Linie, Fläche) und einer Operation, mit der die Selektionsgeometrie mit den Geoinformationen der Ergebnisse verglichen wird. Der Kartenausschnitt wird in der Regel als Rechteck (Bounding Box) definiert. Dieses lässt sich wiederum als Polygon ausdrücken:

Geosuche_Solr_Fallbeispiel_Selektion

Fallbeispiel Solr Geosuche: Bounding Box Selektion

Für die Abfrage stehen nun zwei Operationen zur Verfügung:

  • Intersects: Liefert alle Ergebnisse, die zumindest teilweise innerhalb des Rechtecks liegen.
  • IsWithin: Liefert nur jene Ergebnisse, die vollständig innerhalb des Rechtecks liegen.
?fq=locations:Intersects(POLYGON ((18.131 47.131,18.352 47.164,18.361 47.151,18.431 47.131,18.131 47.131)))
?fq=locations:IsWithin(POLYGON ((18.131 47.131,18.352 47.164,18.361 47.151,18.431 47.131,18.131 47.131)))

Der Unterschied der beiden Varianten lässt sich an der Höhenstraße (rote Linie) und dem Lainzer Tiergarten (blaue Fläche) festmachen. Nachdem sich die Selektion (grünes Rechteck) mit den beiden schneidet – diese also teilweise außerhalb der Selektion liegen – werden sie nur bei der Intersects Query zurückgeliefert:

Geosuche_Solr_Fallbeispiel_Intersects_vs_IsWithin

Fallbeispiel Solr Geosuche: Unterschied Intersects und IsWithin

Bei den punktuellen Daten (Point of Interests) gibt es keinen Unterschied zwischen den beiden Operationen. Diese können nur vollständig innerhalb oder außerhalb der Selektion liegen. Sind ausschließlich punktuelle Daten vorhanden, wird Intersects aus Gründen der Performance empfohlen.

Negation: Alle Ergebnisse außerhalb des Kartenausschnitts

Sucht man alle Treffer außerhalb eines Ausschnitts, liefert die Operation isDisjointTo als Negation von Intersects alle Werte, die komplett außerhalb der Abfrage liegen:

?fq=locations:isDisjointTo(POLYGON ((18.131 47.131,18.352 47.164,18.361 47.151,18.431 47.131,18.131 47.131)))
Geosuche_Solr_Fallbeispiel_Intersects_vs_IsDisjointTo

Geosuche Solr Fallbeispiel Intersects vs IsDisjointTo

Standortsuche

In den oben genannten Beispielen definiert die Abfrage jeweils die geographischen Grenzen um Treffer innerhalb/außerhalb zu finden. Die vierte Operation contains kehrt dieses Prinzip um. Sie findet all jene Flächen, die die Abfrage komplett umschließen. Die Abfragegeometrie liegt also komplett innerhalb derer Grenzen. Definiert man z.B. den aktuellen Standort einer Person als Point(lon/lat), kann man unter anderem folgende Fragen beantworten:

  • Die Person befindet sich in einem Naturschutzgebiet (indiziert als Flächen)
  • Die Person befindet sich in einer gebührenpflichtigen Parkzone (indiziert als Flächen)
  • Die Person befindet sich im Empfangsbereich von einer oder mehreren öffentlichen WLAN Stationen (indiziert als Standorte mit Umkreis)

Die Abfrage wird so formuliert:

?fq=locations:contains(Point (18.131 47.131))
Geosuche Solr Fallbeispiel Contains

Geosuche Solr Fallbeispiel Contains