matlab二维按距离排序,按距离排序 | Elasticsearch: 权威指南 | Elastic

按距离排序edit

检索结果可以按与指定点的距离排序:

当你 可以 按距离排序时, 按距离打分 通常是一个更好的解决方案。

GET /attractions/restaurant/_search

{

"query": {

"filtered": {

"filter": {

"geo_bounding_box": {

"type": "indexed",

"location": {

"top_left": {

"lat": 40.8,

"lon": -74.0

},

"bottom_right": {

"lat": 40.4,

"lon": -73.0

}

}

}

}

}

},

"sort": [

{

"_geo_distance": {

"location": {

"lat": 40.715,

"lon": -73.998

},

"order": "asc",

"unit": "km",

"distance_type": "plane"

}

}

]

}

计算每个文档中 location 字段与指定的 lat/lon 点间的距离。

将距离以 km 为单位写入到每个返回结果的 sort 键中。

使用快速但精度略差的 plane 计算方式。

你可能想问:为什么要制定距离的 单位 呢?用于排序的话,我们并不关心比较距离的尺度是英里、公里还是光年。 原因是,这个用于排序的值会设置在每个返回结果的 sort 元素中。

...

"hits": [

{

"_index": "attractions",

"_type": "restaurant",

"_id": "2",

"_score": null,

"_source": {

"name": "New Malaysia",

"location": {

"lat": 40.715,

"lon": -73.997

}

},

"sort": [

0.08425653647614346

]

},

...

餐厅到我们指定的位置距离是 0.084km。

你可以通过设置 单位 ( unit )来让返回值的形式,匹配你应用中需要的。

地理距离排序可以对多个坐标点来使用,不管(这些坐标点)是在文档中还是排序参数中。使用 sort_mode 来指定是否需要使用位置集合的 最小 ( min ) 最大 ( max )或者 平均 ( avg )距离。

如此就可以返回 “离我的工作地和家最近的朋友” 这样的结果了。

按距离打分edit

有可能距离是决定返回结果排序的唯一重要因素,不过更常见的情况是距离会和其它因素,比如全文检索匹配度、流行程度或者价格一起决定排序结果。

遇到这种场景你需要在 功能评分查询 中指定方式让我们把这些因子处理后得到一个综合分。 越近越好 中有个一个例子就是介绍地理距离影响排序得分的。

另外按距离排序还有个缺点就是性能:需要对每一个匹配到的文档都进行距离计算。而 function_score 查询,在 rescore 语句 中可以限制只对前 n 个结果进行计算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值