Link Search Menu Expand Document Documentation Menu

地理多边形查询

地理多边形查询返回包含位于指定多边形内的地理点(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) 格式指定。

Search for points within the specified quadrilateral

响应包含匹配的文档

{
  "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

支持的格式

您可以在索引文档和搜索文档时,以地理点字段类型接受的任何格式指定地理点坐标。

剩余 350 字符

有问题?

想做贡献?