distance_type 说明
两点之间的距离运算是 非常耗时 的,有时并 不需要 非常精确 的结果,可以指定计算距离的算法,我们可以根据需要从精度和性能之间做出权衡。
7.x官网有以下2个值:
arc
:最慢但最准确的是arc计算,它将地面视为一个球体。精度仍然受到限制,因为地面并不是真正的球体。plane
:plane将地面视为平坦世界,计算 速度更快,但 准确性较低。它在赤道处最精确,而在极点处变得不那么精确。
注意: 如果不写,不知道用哪个值,官网没说
应用场景
可用于地理查询条件
地理位置排序
例子-查询条件
详见 链接
GET /meituan_v1/_search
{
"query": {
"bool": {
"must": {
"match": {
"name": "拉面"
}
},
"filter": {
"geo_distance": {
"distance": "200km",
"distance_type": "arc",
"location": {
"lat": 77,
"lon": 30
}
}
}
}
}
}
例子-排序
搜索结果可以按照距离进行排序,详见 链接
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" // 按照平面计算
}
}
}