Scurtă introducere
Știm că ES suportă o gamă largă de tipuri de date, pe lângă tipurile noastre comune de date de bază, suportă și tipuri de date care înregistrează informații despre locație. În ES, există două tipuri de date care înregistrează informații de geolocalizare, și anume geo_shap și geo_point, iar mai jos voi prezenta pe scurt tipurile geo_point geo_point suportă multiple metode de transfer de date:
Șirul Poziție: lat + "," + lon
Array Poziție: {"lat": ...,"lon": ...}
Obiectiv Locație: [lon, lat]
Notă: Probabil toată lumea a pășit pe această groapă cel puțin o dată == Punctele de coordonate geografice sunt latitudinea mai întâi și longitudinea ultimă ("latitudine, longitudine") când sunt exprimate ca șiruri de șnururi, în timp ce tablourile sunt reprezentate în formă opusă, cu longitudinea mai întâi și latitudinea ultimul ([longitudine, latitudine]). De fapt, în cadrul Elasticesearch, fie că este sub formă de coardă sau de matrice, latitudinea vine prima, iar longitudinea la final. Totuși, în primele zile, pentru a se adapta la specificația de formatare a GeoJSON, reprezentarea formelor de tip array a fost ajustată. Acest lucru este explicat pe site-ul oficial. În general, există următoarele cerințe de interogare pentru tipurile de geo_point
Interogare la distanță Găsiți puncte aflate în raza de acțiune față de punctul central
Interogare distanță (deprevăzută) Interogarea punctelor în intervalul specificat al punctului central este eliminată din API în noua versiune de ES, așa că nu voi explica prea mult aici
Interogare de delimitare Găsește puncte într-un dreptunghi format dintr-un punct specificat
Interogare poligonală Găsește puncte într-un poligon format din mai multe puncte
Fabrica SearchSourceBuilder construită pentru diferite interogări în Java este următoarea:
Serviciul este următorul:
Codul la nivelul controlerului este următorul:
[1]. Cum să folosești
Înainte de a folosi geo_point tipuri, ar trebui mai întâi să specificăm explicit câmpul ca tipul geo_point prin mapare atunci când creăm indexul, după cum urmează:
Mai sus am creat un nou index numit restraunt, iar în fișierul său de mapare specificăm explicit tipul câmpului "locație" ca "geo_point"
[2] Pregătește niște date
Despre Kibana am pregătit următoarele date:
Am pregătit 7 date de mai sus, apoi trebuie să executăm interogarea pentru a vedea dacă interfața noastră corespunde nevoilor noastre.
[3] Anchetă
Distanța de interogare
Celelalte două întrebări sunt aceleași ca cele de mai sus.
|