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禁掉相关度计算,还可以缓存查询结果。