|
|
Опубліковано 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 встановлює додаток і повідомляє «Дані не розпізнаються, будь ласка, поверніть»
|