【问题标题】:elasticsearch geolocation rankelasticsearch地理位置排名
【发布时间】:2021-02-10 09:49:24
【问题描述】:

我使用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 有这样的支持,但是如何将它添加到我的查询中。

【问题讨论】:

    标签: javascript node.js elasticsearch elasticsearch-query


    【解决方案1】:

    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 参数中指定了单位。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      • 2019-07-27
      • 1970-01-01
      相关资源
      最近更新 更多