|
|
Objavljeno na 9. 01. 2019 17:25:39
|
|
|

Kratek uvod
Vemo, da ES podpira širok nabor vrst podatkov, poleg naših osnovnih podatkovnih tipov podpira tudi podatkovne tipe, ki beležijo podatke o lokaciji. V ES obstajata dve vrsti podatkov, ki beležita geolokacijske informacije, in sicer geo_shap in geo_point, spodaj pa bom na kratko predstavil geo_point vrste geo_point podpira več metod prenosa podatkov:
Struna Položaj: lat + "," + lon
Array Položaj: {"lat": ...,"lon": ...}
Namen Lokacija: [dolžina, širina]
Opomba: Verjetno je vsak že stopil na to jamo vsaj enkrat == Geografske koordinatne točke so najprej širina in dolžina zadnja ("zemljepisna širina, dolžina"), ko so izražene kot nizi, medtem ko so polja predstavljena v nasprotni obliki, z dolžino najprej in širino zadnjo ([dolžina, širina]). Pravzaprav je v Elasticesearchu, ne glede na to, ali je v obliki niza ali matrike, najprej zemljepisna širina, dolžina pa zadnja. Vendar pa so v zgodnjih dneh, da bi se prilagodili specifikacijam oblikovanja GeoJSON, prilagodili predstavitev oblik polj. To je pojasnjeno na uradni spletni strani. Za geo_point vrste poizvedb so običajno naslednje zahteve
Poizvedba o razdalji Najdi točke znotraj dosega od središčne točke
Poizvedba o razdalji (zastarela) Poizvedovanje točk znotraj določenega območja središčne točke je v novi različici ES odstranjeno iz API-ja, zato tega tukaj ne bom preveč razlagal
Omejevalna poizvedba Najdi točke znotraj pravokotnika, ki je sestavljen iz določene točke
Poizvedba po poligonu Najdi točke v poligonu, sestavljenem iz več točk
Tovarna SearchSourceBuilder, zgrajena za različne poizvedbe v Javi, je naslednja:
Storitev je naslednja:
Koda na ravni krmilnika je naslednja:
[1]. Kako uporabljati
Preden uporabimo geo_point tipe, moramo najprej eksplicitno določiti polje kot geo_point tip s preslikavo ob ustvarjanju indeksa, kot sledi:
Zgoraj smo ustvarili nov indeks z imenom restraunt, v njegovi mapirni datoteki pa izrecno določimo vrsto polja "location" kot "geo_point".
[2] Pripravi nekaj podatkov
O Kibani smo pripravili naslednje podatke:
Pripravili smo 7 podatkov zgoraj, nato pa moramo izvesti poizvedbo, da preverimo, ali naš vmesnik ustreza našim potrebam.
[3] Preiskava
Razdalja poizvedb
Drugi dve poizvedbi sta enaki kot zgoraj.
|
Prejšnji:ElasticsearchParseException[polje mora biti bodisi [lat], [lon] ali [geohash]]Naslednji:Discuz namesti aplikacijo in reče "Podatki niso prepoznani, prosimo, vrni"
|