|
|
Geplaatst op 09-01-2019 17:25:39
|
|
|

Korte introductie
We weten dat ES een grote verscheidenheid aan datatypes ondersteunt; naast onze gebruikelijke basisdatatypes ondersteunt het ook datatypes die locatiegegevens vastleggen. In ES zijn er twee soorten data die geolocatie-informatie vastleggen, namelijk geo_shap en geo_point, en ik zal hieronder kort geo_point typen introduceren geo_point ondersteunt meerdere methoden voor gegevensoverdracht:
String Positie: breedtegraad + "," + lon
Array Positie: {"lat": ...,"lon": ...}
Doel Locatie: [lon, lat]
Opmerking: Waarschijnlijk heeft iedereen deze put minstens één keer betreden == Geografische coördinatenpunten zijn eerst breedtegraad en lengtegraad als laatste ("breedtegraad, lengtegraad") wanneer ze als strings worden uitgedrukt, terwijl arrays in de tegenovergestelde vorm worden weergegeven, met lengtegraad eerst en breedtegraad als laatste ([lengtegraad, breedtegraad]). In feite komt binnen Elasticesearch, of het nu in de vorm van een string of een array is, de breedtegraad eerst en de lengtegraad als laatste. In de beginjaren werd echter, om zich aan te passen aan de opmaakspecificatie van GeoJSON, de representatie van arrayvormen aangepast. Dit wordt uitgelegd op de officiële website. Er zijn over het algemeen de volgende query-eisen voor geo_point types
Afstandsquery Vind punten binnen bereik van het middelpunt
Afstandsbereik-query (verouderd) Het bevragen van punten binnen het opgegeven bereik van het middelpunt is verwijderd uit de API in de nieuwe versie van ES, dus ik zal het hier niet te veel uitleggen
Begrenzingsquery Vind punten binnen een rechthoek bestaande uit een gespecificeerd punt
Polygoonquery Vind punten in een veelhoek die uit meerdere punten bestaat
De SearchSourceBuilder-fabriek die is opgebouwd voor verschillende zoekopdrachten in Java is als volgt:
Dienst als volgt:
De controllerlaagcode is als volgt:
[1]. Hoe te gebruiken
Voordat we geo_point types gebruiken, moeten we eerst expliciet het veld specificeren als het geo_point type via mapping bij het maken van de index, als volgt:
Hierboven hebben we een nieuwe index aangemaakt genaamd restraunt, en in het mappingbestand specificeren we expliciet het type "locatie" veld als "geo_point"
[2] Maak wat data klaar
Over Kibana hebben we de volgende gegevens voorbereid:
We hebben hierboven 7 stukken data voorbereid, en daarna moeten we de query uitvoeren om te zien of onze interface aan onze behoeften voldoet.
[3] Onderzoek
Queryafstand
De andere twee vragen zijn hetzelfde als hierboven.
|
Vorig:ElasticsearchParseException[veld moet ofwel [lat], [lon] of [geohash]] zijnVolgend:Discuz installeert de app en zegt "Data wordt niet herkend, wilt u retourneren" als oplossing.
|