如何解决弹性搜索地理位置排名
我使用了 elasticsearch
客户端,我的查询在上面。排序时我经常出错。
{
"query": {
"bool": {
"filter": {
"geo_distance": {
"distance": "1km","location": { 40.2075448,28.9992448 },"unit": "km"
}
}
}
},'from': params.page || 1,'size': params.size || 5,}
{
id: 203955,name: 'Crowne Plaza Bursa',location: [lat:40.210384,lon:28.998455],},{
id: 204839,name: 'Sheraton Bursa Hotel',location: [lat:40.2074335,lon:28.9991297]
},{
id: 204838,name: 'Aloft Bursa',location: [lat:40.206863185056,lon:28.999087688955]
}
我需要从近到远排序。我知道 elasticsearch
有这样的支持,但如何将其添加到我的查询中。
解决方法
geo_point
field type 支持多种格式,但您的文档和查询都不能满足它。
对于文档,使用 lat/lon 字典而不是数组:
{
"id": 204839,"name": "Sheraton Bursa Hotel","location": { <---
"lat": 40.2074335,"lon": 28.9991297
}
}
同样的原则适用于查询:
{
"query": {
"bool": {
"filter": {
"geo_distance": {
"distance": "1km","location": { <---
"lat": 40.2075448,"lon": 28.9992448
}
}
}
}
}
}
顺便说一句——不需要 unit
参数——您在 distance
参数中指定了单位。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。