|
|
Publicado em 09/01/2019 17:25:39
|
|
|

Breve introdução
Sabemos que o ES suporta uma grande variedade de tipos de dados, além dos nossos tipos básicos comuns, também suporta tipos de dados que registram informações de localização. No ES, existem dois tipos de dados que registram informações de geolocalização, a saber, geo_shap e geo_point, e vou apresentar brevemente geo_point tipos abaixo geo_point suporta múltiplos métodos de transferência de dados:
String Posição: lat + "," + lon
Arranjo Posição: {"lat": ...,"lon": ...}
Objetivo Localização: [lon, lat]
Nota: Provavelmente todos já pisaram neste poço pelo menos uma vez == Os pontos de coordenadas geográficas são latitude primeiro e longitude por último ("latitude, longitude") quando expressos como cadeias, enquanto os arrays são representados na forma oposta, com longitude primeiro e latitude por último ([longitude, latitude]). Na verdade, dentro do Elasticesearch, seja na forma de corda ou de matriz, a latitude vem primeiro e a longitude vem por último. No entanto, nos primeiros dias, para se adaptar à especificação de formatação do GeoJSON, a representação dos formulários de array foi ajustada. Isso é explicado no site oficial. Geralmente, existem os seguintes requisitos de consulta para os tipos de geo_point
Consulta de distância Encontre pontos dentro do alcance do ponto central
Consulta de intervalo de distância (obsoleta) Consultar pontos dentro do intervalo especificado do ponto central foi removido da API na nova versão do ES, então não vou explicar muito aqui
Consulta delimitadora Encontre pontos dentro de um retângulo que consiste em um ponto especificado
Consulta de polígonos Encontre pontos em um polígono composto por múltiplos pontos
A fábrica do SearchSourceBuilder construída para diferentes consultas em Java é a seguinte:
Serviço da seguinte forma:
O código da camada do controlador é o seguinte:
[1]. Como usar
Antes de usarmos geo_point tipos, devemos primeiro especificar explicitamente o campo como o tipo geo_point via mapeamento ao criar o índice, da seguinte forma:
Acima criamos um novo índice chamado restraunt e, em seu arquivo de mapeamento, especificamos explicitamente o tipo de campo "localização" como "geo_point"
[2] Prepare alguns dados
Sobre Kibana, preparamos os seguintes dados:
Preparamos 7 dados acima, e então precisamos executar a consulta para ver se nossa interface atende às nossas necessidades.
[3] Investigação
Distância de consulta
As outras duas perguntas são as mesmas acima.
|
Anterior:ElasticsearchParseException[campo deve ser [lat], [lon] ou [geohash]]Próximo:A Discuz instala o app e diz "Dados não reconhecidos, por favor devolva" solução alternativa
|