原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/query-dsl-shape-query.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/query-dsl-shape-query.html
本地英文版地址: ../en/query-dsl-shape-query.html
重要: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 当前版本文档。
查询包含使用shape
类型索引的字段的文档。
要求shape
映射。
该查询支持两种定义目标形状的方法,要么提供完整的形状定义,要么引用在另一个索引中预索引的形状的名称或id。这两种格式都在下面用例子进行了定义。
与geo_shape
查询类似,shape
查询使用GeoJSON或众所周知的文本(WKT)来表示形状。
我们来建立一个名为example的索引,新增并索引一个id为1的文档
PUT /example { "mappings": { "properties": { "geometry": { "type": "shape" } } } } # 新增并索引一个id为1的文档 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
- 预索引形状的文档ID。 -
index
- 预索引形状所在的索引的名称。默认为shapes。 -
path
- 指定包含预索引形状的路径的字段。默认为shape。 -
routing
- 形状文档的路由(如果需要)。
下面是一个将过滤用于预索引形状的示例。我们先建立一个名为shapes的索引,然后索引一个文档进去,文档ID为footprint。这里还用到了最上面建立的example索引。
# 建索引 PUT /shapes { "mappings": { "properties": { "geometry": { "type": "shape" } } } } # 添加并索引一个文档,id为footprint 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
字段 包含 查询几何形状中的所有文档。
忽略未映射的字段 (ignore unmapped)
如果ignore_unmapped
选项设置为true
,将忽略未映射的字段,并且此查询不会匹配任何文档。
这在查询可能具有不同映射的多个索引时非常有用。
当设置为false
(默认值)时,如果字段未映射,查询将抛出异常。