|
|
Opublikowano 09.01.2019 17:25:39
|
|
|

Krótkie wprowadzenie
Wiemy, że ES obsługuje szeroką gamę typów danych, oprócz naszych powszechnych podstawowych typów danych, wspiera także typy danych zapisujące informacje o lokalizacji. W ES istnieją dwa typy danych rejestrujące informacje geolokacyjne: geo_shap i geo_point, a poniżej krótko przedstawię geo_point typy geo_point obsługuje wiele metod transferu danych:
struna Pozycja: lata + "", + lon
Tablica Pozycja: {"lat": ...,"lon": ...}
Cel Lokalizacja: [łon, szerok]
Uwaga: Prawdopodobnie każdy przeszedł ten dół przynajmniej raz == Geograficzne punkty współrzędne to szerokość geograficzna najpierw i długość końcowa ("szerokość, długość geograficzna"), gdy wyrażane są jako ciągi znaków, podczas gdy tablice są reprezentowane w przeciwnej formie, z długością najpierw i szerokością szerokości na końcu ([długość, szerokość]). W rzeczywistości w Elasticesearch, niezależnie czy jest to postać ciągu czy tablicy, szerokość geograficzna jest na początku, a długość geograficzna na końcu. Jednak na początku, aby dostosować się do specyfikacji formatowania GeoJSON, zmieniono reprezentację form tablic. Jest to wyjaśnione na oficjalnej stronie internetowej. Zazwyczaj istnieją następujące wymagania dotyczące zapytań dla geo_point typów
Zapytanie o odległość Znajdź punkty w zasięgu od punktu centralnego
Zapytanie o zakres odległości (wycofane) Zapytania do punktów w określonym zakresie punktu centralnego są usuwane z API w nowej wersji ES, więc nie będę tego tu zbyt szczegółowo tłumaczyć
Zapytanie ograniczające Znajdź punkty w obrębie prostokąta składającego się z określonego punktu
Zapytanie wielokątne Znajdź punkty w wielokątie złożonym z wielu punktów
Fabryka SearchSourceBuilder zbudowana dla różnych zapytań w Javie wygląda następująco:
Obsługa następująca:
Kod warstwy kontrolera wygląda następująco:
[1]. Jak używać
Zanim użyjemy geo_point typów, powinniśmy najpierw wyraźnie określić pole jako typ geo_point poprzez mapowanie podczas tworzenia indeksu, w następujący sposób:
Powyżej utworzyliśmy nowy indeks o nazwie restraunt, a w jego pliku mapowania wyraźnie określamy typ pola "location" jako "geo_point"
[2] Przygotuj dane
O Kibanie przygotowaliśmy następujące dane:
Przygotowaliśmy 7 danych powyżej, a następnie musimy wykonać zapytanie, aby sprawdzić, czy nasz interfejs spełnia nasze potrzeby.
[3] Dochodzenie
Odległość zapytania
Pozostałe dwa zapytania są takie same jak powyżej.
|
Poprzedni:ElasticsearchParseException[field musi być albo [lat], [lon] lub [geohash]]Następny:Discuz instaluje aplikację i mówi "Dane nie są rozpoznawane, proszę zwróć" – obejście
|