14. November 2018 Symfony, Use-Case 0 Comments

Umkreissuche mit MySql, elasticsearch und Symfony

In Online-Portalen und Webanwendungen kommt sie immer wieder zum Einsatz: die Umkreissuche (oder auch Distanzsuche). Dabei kommt es darauf an, dass Suchergebnisse in einer definierten Region bzw. einem definierten Umkreis möglichst performant angezeigt werden und optimalerweise auch die Entfernung vom Standord des Suchenden zum jeweiligen Suchergebnis berechnet und angezeigt wird.

Funktionen wie diese haben wir bereits in diversen Online-Portalen umgesetzt. Dabei liegt die Herausforderung nicht nur darin, eine Performance zu erreichen, die zu üblichen Ladezeiten der Ergebnisseite führt (max. 3 Sekunden vom Request an den Server bis zur fertig gerenderten Seite), sondern auch in der Bereitstellung der Daten. Häufig kann der Suchende einen Ort oder eine Postleitzahl als Mittelpunkt für seine Umkreissuche angeben. Um die Entfernung zu den Suchergebnissen (Adressen) zu berechnen, werden für den Mittelpunkt und jedes einzelne Suchergebnis die korrekten Geo-Koordinaten benötigt.

Geo-Koordinaten können von verschiedenen Anbietern bezogen werden, dank Google Maps ist Google einer dieser Anbieter. Es gibt auch alternative Open-Source-Angebote, wie beispielsweise die OpenGeoDB. Diese ist erfahrungsgemäß jedoch weder vollständig noch aktuell und manche Orts- oder Stadteilbezeichnungen sind nicht korrekt. Eine weitere Quelle für qualitativ hochwertige Geo-Daten ist die Deutsche Post, die diese auch auf Straßen-Ebene bereitstellen kann. Für jedes Suchergebnis (Adresse) sollten bei der Eingabe der Daten die Koordinaten der Adresse zum Datensatz gespeichert werden. Das Laden der Koordinaten während der Durchführung der Suche würde sehr viel Zeit benötigen.

Mit der Open-Source-Software elasticsearch sind wir in der Lage, komplexe Suchmaschinen umzusetzen, welche viele Funktionen bereitstellt, große Datenmengen visualisieren und durchsuchen kann und sich somit für performante Webanwendungen hervorragend eignet.

Share: