|
|
Publicado en 9/1/2019 17:25:39
|
|
|

Breve introducción
Sabemos que ES soporta una amplia variedad de tipos de datos, además de nuestros tipos básicos de datos comunes, también soporta tipos de datos que registran información de ubicación. En ES, existen dos tipos de datos que registran la información de geolocalización, a saber, geo_shap y geo_point, y a continuación presentaré brevemente geo_point tipos geo_point soporta múltiples métodos de transferencia de datos:
Cuerda Posición: lat + "," + lon
Matriz Posición: {"lat": ...,"lon": ...}
Objetivo Ubicación: [lon, lat]
Nota: Probablemente todo el mundo haya pisado este pozo al menos una vez == Los puntos de coordenadas geográficas son latitud primero y longitud final ("latitud, longitud") cuando se expresan como cadenas, mientras que los arrays se representan en forma opuesta, con longitud primero y latitud última ([longitud, latitud]). De hecho, dentro de Elasticesearch, ya sea en forma de cuerda o de array, la latitud es la primera y la longitud la última vez. Sin embargo, en los primeros días, para adaptarse a la especificación de formato de GeoJSON, se ajustó la representación de las formas de los arrays. Esto se explica en la página web oficial. Generalmente existen los siguientes requisitos de consulta para los tipos de geo_point
Consulta de distancia Encuentra puntos dentro del rango desde el punto central
Consulta de rango de distancia (obsoleta) Los puntos de consulta dentro del rango especificado del punto central se eliminan de la API en la nueva versión de ES, así que no lo explicaré demasiado aquí
Consulta delimitadora Encuentra puntos dentro de un rectángulo que consiste en un punto especificado
Consulta de polígonos Encontrar puntos en un polígono formado por varios puntos
La fábrica de SearchSourceBuilder construida para diferentes consultas en Java es la siguiente:
Servicio de la siguiente manera:
El código de la capa del controlador es el siguiente:
[1]. Cómo usar
Antes de usar geo_point tipos, deberíamos especificar explícitamente el campo como el tipo geo_point mediante mapeo al crear el índice, de la siguiente manera:
Arriba hemos creado un nuevo índice llamado restraunt, y en su archivo de mapeo especificamos explícitamente el tipo de campo "ubicación" como "geo_point"
[2] Prepara algunos datos
Sobre Kibana hemos preparado los siguientes datos:
Hemos preparado 7 datos arriba, y luego necesitamos ejecutar la consulta para ver si nuestra interfaz cumple con nuestras necesidades.
[3] Investigación
Distancia de consulta
Las otras dos consultas son las mismas que las anteriores.
|
Anterior:ElasticsearchParseException[campo debe ser [lat], [lon] o [geohash]]Próximo:Discuz instala la app y dice "Los datos no se reconocen, por favor devuelven" solución alternativa
|