查询包含索引字段(使用shape类型)的文档。
需要shape mapping.
该查询支持两种定义目标形状的方法,一种是提供完整的形状定义,另一种是引用在另一个索引中预先索引的形状的name或id。下面用示例定义了这两种格式。
内联的形状定义
与geo_shape查询类似,形状查询使用GeoJSON或知名文本(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 ]
}
}
下面的查询将使用Elasticsearch的envelope
GeoJSON扩展查找点:
GET /example/_search
{
"query": {
"shape": {
"geometry": {
"shape": {
"type": "envelope",
"coordinates": [ [ 1355.0, 5355.0 ], [ 1400.0, 5200.0 ] ]
},
"relation": "within"
}
}
}
}
预先索引的形状
该查询还支持使用已经在另一个索引中建立索引的形状。当您拥有对应用程序有用的预定义形状列表,并且希望使用逻辑名称(例如New Zealand)来引用它,而不是每次都必须提供它们的坐标时,这一点特别有用。在这种情况下,只需要提供:
id
- 包含预索引形状的文档的IDindex
- 预索引形状所在的索引名称。默认的形状。path
- 指定为包含预索引形状的路径的字段。默认的形状。routing
- 如果需要,形状文档的路由。
下面是一个使用Filter和预索引形状的例子:
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"
}
}
}
}
}
空间关系
geo_shape策略映射参数决定了在搜索时可以使用哪些空间关系算子。
以下是搜索地理位置字段时可用的空间关系操作符的完整列表:
INTERSECTS
- (default) 返回其geo_shape或geo_point字段与查询几何图形相交的所有文档。DISJOINT
- 返回其geo_shape或geo_point字段与查询几何图形没有共同之处的所有文档。WITHIN
- 返回其geo_shape或geo_point字段在查询几何图形内的所有文档。不支持直线几何图形。CONTAINS
-返回其geo_shape或geo_point字段包含查询几何图形的所有文档。