Географические запросы Elasticsearch

#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 /…