Запрос по гео-многоугольнику

Запрос по гео-многоугольнику возвращает документы, содержащие геоточки, которые находятся внутри указанного многоугольника.

Запрос по гео-многоугольнику возвращает документы, содержащие геоточки, которые находятся внутри указанного многоугольника. Документ, содержащий несколько геоточек, соответствует запросу, если хотя бы одна геоточка соответствует запросу.

Многоугольник задается списком вершин в координатной форме. В отличие от указания многоугольника для поля geoshape, многоугольник не обязательно должен быть замкнутым (не нужно указывать первую и последнюю точки одновременно). Хотя точки не обязательно должны следовать в порядке часовой или против часовой стрелки, рекомендуется перечислять их в одном из этих порядков. Это обеспечит правильное определение многоугольника.

Иск searched document field must be mapped as geo_point.

Пример

Создайте отображение с полем точки, сопоставленным как geo_point:

PUT /testindex1
{
  "mappings": {
    "properties": {
      "point": {
        "type": "geo_point"
      }
    }
  }
}

Индексуйте геоточку, указав ее широту и долготу:

PUT testindex1/_doc/1
{
  "point": { 
    "lat": 73.71,
    "lon": 41.32
  }
}

Ищите документы, чьи объекты точки находятся внутри указанного гео-многоугольника:

GET /testindex1/_search
{
  "query": {
    "bool": {
      "must": {
        "match_all": {}
      },
      "filter": {
        "geo_polygon": {
          "point": {
            "points": [
              { "lat": 74.5627, "lon": 41.8645 },
              { "lat": 73.7562, "lon": 42.6526 },
              { "lat": 73.3245, "lon": 41.6189 },
              { "lat": 74.0060, "lon": 40.7128 }
            ]
          }
        }
      }
    }
  }
}

Многоугольник, указанный в предыдущем запросе, представляет собой четырехугольник. Соответствующий документ находится внутри этого четырехугольника. Координаты вершин четырехугольника указаны в формате (широта, долгота). geo Ответ содержит соответствующий документ:

{
  "took": 6,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "testindex1",
        "_id": "1",
        "_score": 1,
        "_source": {
          "point": {
            "lat": 73.71,
            "lon": 41.32
          }
        }
      }
    ]
  }
}

В предыдущем запросе вы указали вершины многоугольника в порядке часовой стрелки:

"geo_polygon": {
    "point": {
        "points": [
            { "lat": 74.5627, "lon": 41.8645 },
            { "lat": 73.7562, "lon": 42.6526 },
            { "lat": 73.3245, "lon": 41.6189 },
            { "lat": 74.0060, "lon": 40.7128 }
        ]
    }
}

Альтернативно, вы можете указать вершины в порядке против часовой стрелки:

"geo_polygon": {
    "point": {
        "points": [
            { "lat": 74.5627, "lon": 41.8645 },
            { "lat": 74.0060, "lon": 40.7128 },
            { "lat": 73.3245, "lon": 41.6189 },
            { "lat": 73.7562, "lon": 42.6526 }
        ]
    }
}

Ответ на запрос будет содержать тот же соответствующий документ.

Однако, если вы укажете вершины в следующем порядке:

"geo_polygon": {
    "point": {
        "points": [
            { "lat": 74.5627, "lon": 41.8645 },
            { "lat": 74.0060, "lon": 40.7128 },
            { "lat": 73.7562, "lon": 42.6526 },
            { "lat": 73.3245, "lon": 41.6189 }
        ]
    }
}

Ответ не вернет никаких результатов.

Параметры

Запросы по гео-многоугольнику принимают следующие параметры:

Параметр Тип данных Описание
_name String Имя фильтра. Необязательный параметр.
validation_method String Метод валидации. Допустимые значения: IGNORE_MALFORMED (принимать геоточки с недопустимыми координатами), COERCE (попробовать привести координаты к допустимым значениям) и STRICT (возвращать ошибку при недопустимых координатах). Необязательный параметр. По умолчанию - STRICT.
ignore_unmapped Boolean Указывает, следует ли игнорировать неотображаемое поле. Если установлено в true, запрос не возвращает документы, содержащие неотображаемое поле. Если установлено в false, при неотображаемом поле возникает исключение. Необязательный параметр. По умолчанию - false.

Принятые форматы

Вы можете указывать координаты геоточки при индексации документа и поиске документов в любом формате, который принимает тип поля geopoint.