|
|
Опубликовано 09.01.2019 17:25:39
|
|
|

Краткое введение
Мы знаем, что ES поддерживает широкий спектр типов данных, помимо наших распространённых базовых типов данных, он также поддерживает типы данных, фиксирующие информацию о местоположении. В ES существуют два типа данных, фиксирующих геолокационную информацию: geo_shap и geo_point, и ниже я кратко представим geo_point типы geo_point поддерживает несколько способов передачи данных:
Строка Положение: широта + "," + лон
Массив Позиция: {"lat": ...,"lon": ...}
Цель Местоположение: [лон, широта]
Примечание: Вероятно, каждый хотя бы раз наступал на эту яму == Географические координаты — это первая широта и последняя («широта, долгота»), если выражать их в виде строк, тогда как массивы представлены в противоположном виде: сначала долгота и последняя ([долгота, широта]). На самом деле, в Elasticesearch, будь то строка или массивы, широта стоит на первом месте, а долгота — последнее. Однако в первые годы, чтобы адаптироваться к спецификации форматирования GeoJSON, представление форм массивов было корректировано. Это объясняется на официальном сайте. Обычно существуют следующие требования к запросам для типов geo_point
Запрос по расстоянию Найдите точки в радиусе действия от центральной точки
Запрос по диапазону расстояния (устарело) Запросы точек в заданном диапазоне центральной точки удалены из API в новой версии ES, поэтому я не буду подробно объяснять
Ограничивающий запрос Найти точки внутри прямоугольника, состоящего из заданной точки
Запрос по полигону Найти точки в многоугольнике, состоящем из нескольких точек
Фабрика SearchSourceBuilder, созданная для различных запросов на Java, выглядит следующим образом:
Служба в следующем виде:
Код уровня контроллера выглядит следующим образом:
[1]. Как использовать
Прежде чем использовать geo_point типа, сначала следует явно указать поле как geo_point тип с помощью отображения при создании индекса, следующим образом:
Выше мы создали новый индекс под названием restraunt, и в его файле отображения мы явно указываем тип поля «location» как «geo_point»
[2] Подготовьте некоторые данные
По Кибане мы подготовили следующие данные:
Мы подготовили 7 данных выше, а затем нам нужно выполнить запрос, чтобы проверить, соответствует ли наш интерфейс нашим потребностям.
[3] Расследование
Расстояние запроса
Остальные два запроса совпадают с предыдущими выше.
|
Предыдущий:ElasticsearchParseException[поле должно быть либо [lat], [lon], либо [geohash]]Следующий:Discuz устанавливает приложение и показывает обходной путь «Данные не распознаются, пожалуйста, возвращайте»
|