В предыдущих уроках мы обсудили простые и сложные типы данных, поддерживаемые Elasticsearch. В этом уроке мы разберем тип для указания географического местоположения. Elasticsearch упрощает работу с запросами на основе местоположения, такими как запрос в радиусе, агрегирование на основе местоположения, сортировка по местоположению и т. д.
Elasticsearch поддерживает два типа данных для хранения местоположения:
geo-point
: Используется для хранения долготы и широты позиции.geo-shape
: Используется для хранения гео-фигур, таких как круги и многоугольники.
В этом уроке мы обсудим только, как установить схему для типа geo-point
. Тип geo-shape
предназначен для хранения гео-фигур. Чтобы узнать больше о geo-shape
, перейдите по следующей ссылке:
https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-shape.html
А в 7 уроке мы разберем как делать гео пространственные запросы. Использование гео-запросов не очень отличается от других запросов, за исключением нескольких параметров.
Тип geo-point
данных
Мы можем установить типgeo-point
для поля geo_location
, как показано ниже:
PUT example3/_mapping/address { "properties": { "geo_location": { "type": "geo_point" } } }
В следующем примере давай добавим документ с гео позицией:
PUT example3/address/1 { "street": "Лесная 5", "city": "Харчки", "geo_location": { "lat": 37.3, "lon": 121.8 } }
Убедитесь, что тип geo_location
установлен до того, как вы добавите первый документ, иначе поле geo_location
будет сохранено как объект с lat
и lon
строками. Если все идет хорошо, вы должны увидеть примерно следующее:
{ "_index": "example3", "_type": "address", "_id": "1", "_version": 1, "result": "created", "_shards": { "total": 1, "successful": 1, "failed": 0 }, "created": true }
Обратите внимание, что значение поля geo_location
в документе также может быть представлено как:
- строка в формате
"lat,lon" ("geo_location" : "37.3,121.8")
- массив с форматом
[lon, lat] ("geo_location" : [121.8,37.3])
- гео-хэш
("geo_location" : "wwws5wk01xyw")