Autocomplete Suche (GEOLocation)

Hallo zusammen,

vorerst, ich werde die Datenbank von http://www.geonames.org/ (Inkl. alternative names) nutzen. Hab sie bis jetzt aber noch nicht unter MySQL eingespielt.

Auf der Startseite wird es einen Input mit Autocomplete geben. Er soll anhand von dem was der Visitor eingetippt hat, die besten 5 Städte aus der Datenbank vorschlagen. (Like Suche)

Klickt der Benutzer auf die Stadt und auf den Suchen button, erscheint er auf der Seite: www.blabla.com/search/duesseldorf-nrw-deutschland. Die Url kann jederzeit manipuliert werden, sprich in blabla.com/search/springfield.

Jetzt muss ich anhand dieser Daten die richtige Stadt/Geolocation (id) aus der Datenbank holen. Wie kann ich da am besten vorgehen? Beispieldaten wären unteranderem:

  • duesseldorf-nrw-deutschland
  • springfield
  • deutschland

Noch habe ich garnicht mit der Implementierung angefangen. Brauche etwas Rat.

Vielen Dank im Voraus.

Also konkret suchst du nach einer Möglichkeit die URL in PHP zu verarbeiten?

Entweder über die Superglobale $_SERVER[‚REQUEST_URI‘]
oder über: http://php.net/manual/de/function.parse-url.php

Nein, ich will genau sowas haben: http://api.geonames.org/search?q=berlin,germany&maxRows=10&style=LONG&lang=en&username=demo&featureClass=P&featureClass=A

Habe die Datenbank dazu, jedoch die Klassen stehen leider nicht zur Verfügung oder ich habe sie nicht gefunden. Mir ist es wichtig, dieses Resultat aus meiner Datenbank zu erhalten. (Ohne einen Api-Call zu geonames, sondern direkt offline über MySQL)

Und wo ist konkret das Problem?

Das Problem ist, dass ich nicht auf die Api von Geonames zugreifen will. Ich will selber meine eigene Datenbank nutzen anhand der Daten, die bei geonames herunterladbar sind.

Diese will ich in MySQL importieren und anschliessend will ich genau so eine Suche ermöglichen? Jedoch wüsste ich nicht wie ich das ganze parsen (Sprich munih, germany) sollte? Wie die Query aussehen sollte bzgl. Performance?

Die Antwort darauf hängt von deinem eigenen Datenbankschema ab. Dieses musst Du optimal auf das schnelle Auslesen von Werten auslegen. Schau dir z.B. mal die OpenGeoDB an - dort gibt es ein interessantes Schema mit zahlreichen SQL-Beispielen.

Danke für die Antworten.

Okay, fangen wir erst mit dem Parser an.
Sagen wir ich habe eine Datenbank mit den spalten:
land, bundesland, plz, ort.

Und eine Suche sieht z.B. so aus:
„40211 Düsseldorf, Germany“
„Düsseldorf, nrw“
„düsseldorf“
„Düsseldorf, Germany“
„Germany Düsseldorf“

Wie kann ich das ganze am besten anhand dieser Suchen parsen? Irgendwie muss ja eine query gebaut werden…

Genau hier sehe ich auch das schwierigste. Übrigens ich werde ElasticSearch nutzen (Habe bis jetzt aber noch nie damit gearbeitet). Evtl. bietet ElasticSearch genau so etwas an und ich weiss davon nichts.

Habe zwar selbst noch nie praktisch mit ElasticSearch gearbeitet, aber wenn du den Einstieg geschafft hast, sollte deine eigentliche Frage ein Kinderspiel sein.

Denke ich auch. Werde es mir mal zeitnah anschauen, evtl. gibt es hier Erfahrene in ElasticSearch und könnten mir weiterhelfen?