#java #elasticsearch #elastic-rest-client
#java #elasticsearch #эластичный rest-клиент
Вопрос:
Мы переходим на ES и должны поддерживать другие географические запросы. В нашем отображении мы используем тип поля geo_point. Я вижу, что ES поддерживает geo_bounding_box и geo_distance, но я пытаюсь выяснить, можно ли их использовать для приведенных ниже вариантов использования:
1.BBOX: где поле определяется с использованием центральной точки и радиуса. Насколько я понимаю, geo_distance создаст круглую форму, как мы можем использовать bbox этого круга?
//something like this - but we want a box shape not circle
QueryBuilders.geoDistanceQuery("location")
.point(lat, lon)
.distance(r, DistanceUnit.KILOMETERS);
2.LAT_WITHIN: как мы можем проверить наличие документов с широтой, которая находится на расстоянии (север и юг) от центральной широты?
//something like this - but with only lat amp; radius
QueryBuilders.geoDistanceQuery(pointField)
.point(lat) //only lat?
.distance(r, DistanceUnit.KILOMETERS);
3.LON_WITHIN: аналогично приведенной выше точке, но для долготы.
4. ТО ЖЕ САМОЕ: найдите документы с одинаковыми широтами. Итак, можем ли мы использовать здесь поле географической точки в запросе term или можно использовать ключи lat / lon?
//point equal - this gives error
QueryBuilders.termQuery("location", "lat,lon");
//OR - this doesn't return
QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("location.lat", lat))
.must(QueryBuilders.termQuery("location.lon", lon));
использование первого запроса выдает ошибку «Географические поля не поддерживают точный поиск, вместо этого используйте выделенные географические запросы: [местоположение]». Второй запрос не возвращает результатов.
Спасибо
Комментарии:
1. Я думаю, что 1-2-3 и быть легко достигнуты с помощью
geo_polygon
запроса . Что касается 4, вы можете использоватьgeo_distance
запрос с очень маленьким радиусом.2. спасибо за ваш ответ. Из кода построитель запросов geopolygon ожидает список географических точек (я думаю, по крайней мере, три). Возможно, это глупый вопрос, но как я могу получить полигон только по широте и расстоянию?
3. Этот ответ помог мне. Спасибо. discuss.elastic.co/t/elasticsearch-geo-queries-java-api/173501 /…