经纬度英文
longitude:经度
latitude:纬度
geo_bounding_box
根据 左上角坐标 和 右下角坐标,画出矩形,找出落在指定矩形框中的坐标点
如下图:左上点、右下点,连接一个区域,找出落在该区域的点
简单例子
get /meituan_v1/_search
{
"query": {
"geo_bounding_box": {
"location": {
"top_left": {
"lat": 90,
"lon": 31
},
"bottom_right": {
"lat": 39,
"lon": 118
}
}
}
}
}
注意
查询时,给 右上点、左下点,认为绕了地球一圈:
多条件查询
filter 一般多用于范围查询
get /meituan_v1/_search
{
"query": {
"bool": {
"must": [
{
"wildcard": {
"name": "*拉面*"
}
}
],
"filter": [
{
"geo_bounding_box": {
"location": {
"top_left": {
"lat": 90,
"lon": 31
},
"bottom_right": {
"lat": 39,
"lon": 118
}
}
}
}
]
}
}
}
geo_polygon
多点查询,点 的数量要 超过3个,否则无法连成一个区域
如下图:3个蓝点连接一个区域,查询落在该区域的点
get /meituan_v1/_search
{
"query": {
"bool": {
"must": {
"wildcard": {
"name": "*拉面*"
}
},
"filter": {
"geo_polygon": {
"location": {
"points": [
{
"lat": 90,
"lon": 31.1
},
{
"lat": 20,
"lon": 24
},
{
"lat": 39,
"lon": 124.1
}
]
}
}
}
}
}
}
geo_distance_range
找出与指定位置给定最小距离和最大距离之间的点
与 geo_distance 相比,geo_distance_range 是一个环,会排除内圈中的所有文档
5.x 废弃
排序
搜索结果可以按照距离进行排序
GET /meituan_v1/_search
{
"query": {
"bool": {
"must": {
"wildcard": {
"name": "*面*"
}
},
"filter": {
"geo_bounding_box": {
"location": {
"top_left": {
"lat": 90,
"lon": 31
},
"bottom_right": {
"lat": 39,
"lon": 118
}
}
}
}
}
},
"sort": {
"_geo_distance": {
"location": { // 计算所有文档按照该指定位置的距离
"lat": 78,
"lon": 36
},
"order": "asc", //从近到远
"unit": "km", // 将距离以 km 为单位写入每个返回结果的sort键中
"distance_type": "plane" // 按照平面计算
}
}
}
distance_type解释: 详见 链接


