地理多边形查询
地理多边形查询返回包含位于指定多边形内的地理点(geopoint)的文档。如果文档包含的多个地理点中至少有一个匹配查询,则该文档匹配查询。
多边形通过坐标形式的顶点列表指定。与为地理形状(geoshape)字段指定多边形不同,多边形无需闭合(无需指定第一个点和最后一个点相同)。虽然点不必遵循顺时针或逆时针顺序,但建议您按其中一种顺序列表。这将确保捕获正确的多边形。
搜索的文档字段必须映射为 geo_point
。
示例
创建将 point
字段映射为 geo_point
的映射
PUT /testindex1
{
"mappings": {
"properties": {
"point": {
"type": "geo_point"
}
}
}
}
索引地理点,指定其纬度和经度
PUT testindex1/_doc/1
{
"point": {
"lat": 73.71,
"lon": 41.32
}
}
搜索其 point
对象位于指定 geo_polygon
内的文档
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 }
]
}
}
}
}
}
}
前面请求中指定的多边形是下图所示的四边形。匹配的文档位于此四边形内。四边形顶点的坐标以 (latitude, longitude)
格式指定。
响应包含匹配的文档
{
"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 | 字符串 | 过滤器的名称。可选。 |
validation_method | 字符串 | 验证方法。有效值为 IGNORE_MALFORMED (接受具有无效坐标的地理点)、COERCE (尝试将坐标强制转换为有效值)和 STRICT (当坐标无效时返回错误)。可选。默认值为 STRICT 。 |
ignore_unmapped | 布尔型 | 指定是否忽略未映射的字段。如果设置为 true ,则查询不会返回任何包含未映射字段的文档。如果设置为 false ,则当字段未映射时会抛出异常。可选。默认值为 false 。 |
支持的格式
您可以在索引文档和搜索文档时,以地理点字段类型接受的任何格式指定地理点坐标。