地理位置多边形(geo-polygon)查询

返回地理位置坐标点仅落在多边形内的文档。这里有一个例子:

GET /_search
{
    "query": {
        "bool" : {
            "must" : {
                "match_all" : {}
            },
            "filter" : {
                "geo_polygon" : {
                    "person.location" : {
                        "points" : [
                            {"lat" : 40, "lon" : -70},
                            {"lat" : 30, "lon" : -80},
                            {"lat" : 20, "lon" : -90}
                        ]
                    }
                }
            }
        }
    }
}

查询选项

选项 描述

_name

可选,用来标识过滤器名称的字段

validation_method

设置为IGNORE_MALFORMED以接受无效的纬度或经度值的 geo point,设置为COERCE以尝试推断正确的纬度或经度。(默认为 STRICT)。

允许的格式

作为 lat lon 数组

格式为[lon, lat]。注意,此处 lon/lat 的顺序是为了符合GeoJSON

GET /_search
{
    "query": {
        "bool" : {
            "must" : {
                "match_all" : {}
            },
            "filter" : {
                "geo_polygon" : {
                    "person.location" : {
                        "points" : [
                            [-70, 40],
                            [-80, 30],
                            [-90, 20]
                        ]
                    }
                }
            }
        }
    }
}
作为 lat lon 字符串

格式为lat,lon

GET /_search
{
    "query": {
        "bool" : {
            "must" : {
                "match_all" : {}
            },
            "filter" : {
               "geo_polygon" : {
                    "person.location" : {
                        "points" : [
                            "40, -70",
                            "30, -80",
                            "20, -90"
                        ]
                    }
                }
            }
        }
    }
}
geohash
GET /_search
{
    "query": {
        "bool" : {
            "must" : {
                "match_all" : {}
            },
            "filter" : {
               "geo_polygon" : {
                    "person.location" : {
                        "points" : [
                            "drn5x1g8cu2y",
                            "30, -80",
                            "20, -90"
                        ]
                    }
                }
            }
        }
    }
}

geo_point 类型

查询要求在相关字段中设置geo_point类型。

忽略未映射的字段 (ignore unmapped)

如果ignore_unmapped选项设置为true,将忽略未映射的字段,并且此查询不会匹配任何文档。 这在查询可能具有不同映射的多个索引时非常有用。 当设置为false(默认值)时,如果字段未映射,查询将抛出异常。