Запрос Shape
Осуществляет поиск документов, содержащих поля, индексированные с помощью типа shape.
Требует shape Картирование.
Запрос поддерживает два способа определения целевой формы: путем предоставления полного определения формы или путем ссылки на имя или идентификатор формы, предварительно индексированной в другом индексе. Оба формата определены ниже с примерами.
Определение формы в строке
Подобно запросу geo_shape, запрос shape использует GeoJSON или Well Known Text (WKT) для представления форм.
Учитывая следующий индекс:
PUT /example
{
"mappings": {
"properties": {
"geometry": {
"type": "shape"
}
}
}
}
PUT /example/_doc/1?refresh=wait_for
{
"name": "Lucky Landing",
"geometry": {
"type": "point",
"coordinates": [ 1355.400544, 5255.530286 ]
}
} Следующий запрос найдёт точку, используя расширение GeoJSON Elasticsearch’s envelope:
GET /example/_search
{
"query": {
"shape": {
"geometry": {
"shape": {
"type": "envelope",
"coordinates": [ [ 1355.0, 5355.0 ], [ 1400.0, 5200.0 ] ]
},
"relation": "within"
}
}
}
} Предварительно индексированная форма
Запрос также поддерживает использование формы, которая уже была индексирована в другом индексе. Это особенно полезно, когда у вас есть предварительно определённый список форм, полезный для вашего приложения, и вы хотите ссылаться на него с помощью логического имени (например, Новая Зеландия), а не предоставлять координаты каждый раз. В этой ситуации необходимо только указать:
-
id- Идентификатор документа, содержащего предварительно индексированную форму. -
index- Имя индекса, где находится предварительно индексированная форма. По умолчанию shapes. -
path- Поле, указанное в качестве пути, содержащего предварительно индексированную форму. По умолчанию shape. -
routing- Маршрутизация документа формы, если требуется.
Следующий пример использования фильтра с предварительно индексированной формой:
PUT /shapes
{
"mappings": {
"properties": {
"geometry": {
"type": "shape"
}
}
}
}
PUT /shapes/_doc/footprint
{
"geometry": {
"type": "envelope",
"coordinates": [ [ 1355.0, 5355.0 ], [ 1400.0, 5200.0 ] ]
}
}
GET /example/_search
{
"query": {
"shape": {
"geometry": {
"indexed_shape": {
"index": "shapes",
"id": "footprint",
"path": "geometry"
}
}
}
}
} Пространственные отношения
Ниже приведён полный список операторов пространственных отношений:
-
INTERSECTS- (по умолчанию) Возвращает все документы, чьё полеshapeпересекается с геометрией запроса. -
DISJOINT- Возвращает все документы, чьё полеshapeне имеет ничего общего с геометрией запроса. -
WITHIN- Возвращает все документы, чьё полеshapeнаходится внутри геометрии запроса. -
CONTAINS- Возвращает все документы, чьё полеshapeсодержит геометрию запроса.
Игнорировать неотображенные
Когда значение установлено в true, опция ignore_unmapped проигнорирует неотображенное поле и не будет сопоставлять ни один документ для этого запроса. Это может быть полезно при запросе к нескольким индексам, которые могут иметь разные отображения. Если значение установлено в false (значение по умолчанию), запрос выдаст исключение, если поле не отображается.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/query-dsl-shape-query.html