Kurze Einführung
Wir wissen, dass ES eine große Vielfalt an Datentypen unterstützt; neben unseren üblichen Grunddatentypen unterstützt es auch Datentypen, die Standortinformationen aufzeichnen. Im ES gibt es zwei Arten von Daten, die Geostandortinformationen erfassen, nämlich geo_shap und geo_point, und ich werde im Folgenden kurz geo_point Typen vorstellen. geo_point unterstützt mehrere Datenübertragungsmethoden:
Schnur Position: Latte + "", + Lon
Anordnung Position: {"lat": ...,"lon": ...}
Ziel Ort: [lon, lat]
Hinweis: Wahrscheinlich ist jeder mindestens einmal in diese Grube getreten == Geographische Koordinatenpunkte sind zuerst Breite und Länge zuletzt ("Breite, Längegrad"), wenn sie als Strings ausgedrückt werden, während Arrays in der entgegengesetzten Form dargestellt werden, mit Längengrad zuerst und Breite zuletzt ([Länge, Breitegrad]). Tatsächlich kommt innerhalb von Elasticesearch, egal ob in Form eines Strings oder eines Arrays, die Breite zuerst und die Länge zuletzt. In den Anfangstagen wurde jedoch, um sich an die Formatierungsspezifikation von GeoJSON anzupassen, die Darstellung von Array-Formen angepasst. Das wird auf der offiziellen Website erklärt. Es gibt im Allgemeinen folgende Abfrageanforderungen für geo_point Typen
Distanzanfrage Finde Punkte in Reichweite vom Mittelpunkt
Distanzbereichsabfrage (veraltet) Das Abfragen von Punkten innerhalb des angegebenen Bereichs des Mittelpunkts wird in der neuen ES-Version aus der API entfernt, daher werde ich das hier nicht zu sehr erklären
Begrenzungsanfrage Finde Punkte innerhalb eines Rechtecks, das aus einem bestimmten Punkt besteht
Polygon-Abfrage Finde Punkte in einem Polygon, das aus mehreren Punkten besteht
Die SearchSourceBuilder-Fabrik, die für verschiedene Abfragen in Java aufgebaut wurde, ist wie folgt:
Dienst wie folgt:
Der Code der Controller-Schicht ist wie folgt:
[1]. Wie man sie einsetzt
Bevor wir geo_point Typen verwenden, sollten wir zunächst explizit das Feld als geo_point Typ per Abbildung beim Erstellen des Index angeben, wie folgt:
Oben haben wir einen neuen Index namens restraunt erstellt, und in seiner Mapping-Datei geben wir explizit den Typ des "Standort"-Feldes als "geo_point" an.
[2] Bereite einige Daten vor
Zu Kibana haben wir folgende Daten erstellt:
Wir haben oben sieben Datenstücke vorbereitet und müssen dann die Abfrage ausführen, um zu sehen, ob unsere Benutzeroberfläche unseren Anforderungen entspricht.
[3] Untersuchung
Abfragedistanz
Die anderen beiden Anfragen sind dieselben wie oben.
|