一架梯子,一头程序猿,仰望星空!

Elasticsearch geo_polygon 按多边形范围搜索


ES 通过geo_polygon,在地图上画一个多边形,搜索包含在多边形内部的坐标点。

例子:

在地图上画一个多边形,搜索店铺

GET /shops/_search
{
  "query": {
    "bool": {
      "must": {
        "match_all": {} // 这里不设置其他搜索条件,直接匹配所有文档
      },
      "filter": { // 地理信息搜索不参与相关度算分,所以使用filter包裹起来
        "geo_polygon": { // geo_polygon搜索语句
          "location": { // 店铺的坐标存储在location字段.
            "points": [ // 设置组成多边形的经纬度坐标点数组。
              {
                "lat": 40.73, // 纬度
                "lon": -74.1 // 经度
              },
              {
                "lat": 40.83,
                "lon": -75.1
              },
              {
                "lat": 20,
                "lon": -90
              }
            ]
          }
        }
      }
    }
  }
}

说明:

通常ES搜索中为了提升性能,可以使用filter禁掉相关度计算,还可以缓存查询结果。