Кратко въведение
Знаем, че ES поддържа голямо разнообразие от типове данни, освен обичайните ни основни типове данни, поддържа и типове данни, които записват информация за местоположението. В ES има два типа данни, които записват геолокационна информация – geo_shap и geo_point, и ще представя накратко geo_point типа по-долу geo_point поддържа множество методи за пренос на данни:
Низ Позиция: lat + "," + lon
Масив Позиция: {"lat": ...,"lon": ...}
Обект Местоположение: [лон, ширина]
Забележка: Вероятно всеки е стъпвал на тази яма поне веднъж == Географските координатни точки са първа ширина и последна ("ширина, дължина"), когато се изразяват като низове, докато масивите са представени в противоположна форма, като дължината е първа, а последна ([дължина, ширина]). Всъщност, в рамките на Elasticesearch, независимо дали е под формата на струна или масив, ширината е първа, а дължината е последна. Въпреки това, в ранните дни, за да се адаптира към спецификацията за форматиране на GeoJSON, представянето на масивните форми беше коригирано. Това е обяснено на официалния уебсайт. Обикновено съществуват следните изисквания за заявки за geo_point типове
Заявка за разстояние Намерете точки в обхвата от централната точка
Заявка за обхват на разстояние (остаряла) Заявките в посочения диапазон на централната точка са премахнати от API в новата версия на ES, затова няма да обяснявам твърде много тук
Ограничителна заявка Намерете точки в правоъгълник, състоящ се от определена точка
Polygon заявка Намерете точки в многоъгълник, съставен от множество точки
Фабриката SearchSourceBuilder, създадена за различни заявки в Java, е следната:
Обслужване както следва:
Кодът на слоя на контролера е следният:
[1]. Как да използвате
Преди да използваме geo_point типове, първо трябва изрично да посочим полето като geo_point тип чрез съпоставяне при създаване на индекса, както следва:
По-горе създадохме нов индекс, наречен restraunt, и в неговия mapping файл изрично посочваме типа поле "location" като "geo_point"
[2] Подгответе някои данни
За Кибана сме подготвили следните данни:
Подготвили сме 7 данни по-горе и след това трябва да изпълним заявката, за да видим дали интерфейсът ни отговаря на нуждите ни.
[3] Разследване
Разстояние на заявка
Останалите две запитвания са същите като горните.
|