|
|
Opslået på 09/01/2019 17.25.39
|
|
|

Kort introduktion
Vi ved, at ES understøtter en bred vifte af datatyper, og ud over vores almindelige grundlæggende datatyper understøtter det også datatyper, der registrerer lokalitetsinformation. I ES findes der to typer data, der registrerer geolokationsinformation, nemlig geo_shap og geo_point, og jeg vil kort introducere geo_point typer nedenfor geo_point understøtter flere dataoverførselsmetoder:
Streng Position: breddegrad + "," + lon
Array Position: {"lat": ...,"lon": ...}
Formål Sted: [lon, lat]
Bemærk: Sandsynligvis har alle trådt på dette hul mindst én gang == Geografiske koordinatpunkter er breddegrad først og længdegrad sidst ("breddegrad, længdegrad"), når de udtrykkes som strenge, mens arrays repræsenteres i modsat form, med længdegrad først og breddegrad sidst ([længdegrad, breddegrad]). Faktisk kommer breddegrad først og længdegrad i Elasticesearch, uanset om det er i form af en streng eller et array. Men i de tidlige dage blev repræsentationen af array-formularer justeret for at tilpasse sig formateringsspecifikationen i GeoJSON. Dette forklares på den officielle hjemmeside. Der er generelt følgende forespørgselskrav for geo_point typer
Afstandsforespørgsel Find punkter inden for rækkevidde fra midtpunktet
Afstandsområdeforespørgsel (forældet) Forespørgsler på punkter inden for det angivne område for centerpunktet fjernes fra API'et i den nye version af ES, så jeg vil ikke forklare det for meget her
Afgrænsningsforespørgsel Find punkter inden for et rektangel bestående af et specificeret punkt
Polygonforespørgsel Find punkter i en polygon bestående af flere punkter
SearchSourceBuilder-fabrikken, der er konstrueret til forskellige forespørgsler i Java, er som følger:
Betjening som følger:
Controller-lagets kode er som følger:
[1]. Sådan bruges
Før vi bruger geo_point typer, bør vi først eksplicit specificere feltet som geo_point type via mapping ved oprettelse af indekset, som følger:
Ovenfor har vi oprettet et nyt indeks kaldet restraunt, og i dets mappingfil specificerer vi eksplicit typen af "lokation"-felt som "geo_point"
[2] Forbered nogle data
Om Kibana har vi udarbejdet følgende data:
Vi har forberedt 7 datastykker ovenfor, og derefter skal vi udføre forespørgslen for at se, om vores interface opfylder vores behov.
[3] Forespørgsel
Forespørgselsafstand
De to andre forespørgsler er de samme som ovenfor.
|
Tidligere:ElasticsearchParseException[felt skal være enten [lat], [lon] eller [geohash]]Næste:Discuz installerer appen og siger "Data genkendes ikke, returner venligst" som en løsning.
|