【问题标题】:Prioritise match results by geo_point and ordering by closest location in Elasticsearch按 geo_point 优先匹配结果并按 Elasticsearch 中最近的位置排序
【发布时间】:2017-03-07 05:39:53
【问题描述】:

我有一个GET 请求,即匹配查询字符串。它在地址字符串中搜索,现在从索引中返回可靠且相关的结果。

现在我想按距离优先考虑结果,所以首先返回相关字符串并按最近的地理点参数排序

sort放到同一个层级,就在query参数之后,实际上并不返回按距离排序的命中。它返回奇怪的结果,这绝对不是我想要的。

这是我使用的映射

{
   "location": {
      "properties": {
         "address": {
            "type": "string"
         },
         "gps": {
            "type": "geo_point"
         }
      }
   }
}

我现在做的请求是:

GET /locations/location/_search

{        
   "query": {
       "match" : {
            "address" : {
                "query": "Churchill Av"                               
            }
        }      
   },
  "sort": [
    {
      "_geo_distance": {
        "gps": { 
          "lat": 51.358599, 
          "lon": 0.531964
        },
        "order":         "asc",
        "unit":          "km", 
        "distance_type": "plane" 
      }
    }
  ]   
}

我知道最好的方法是先通过匹配得到结果,然后按距离对这几个结果进行排序,所以地理距离计算不会太贵。

我试过this question,但没有用。

编辑:我需要提一下,我将 geo_point 数据存储在我的索引中,如下所示:

"_source": {
    "address" : "Abcdef, ghijk, lmnoprst"
    "gps": [
        51.50,
        1.25
    ]
} 

问题:如何设置地理距离排序/过滤器,以便结果在匹配查询之后排序,按最接近的 geo_point 参数排序?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    编辑:

    我意识到,由于 geo_point 数据存储为 索引数组,这意味着值是 [Lon, Lat],而不是我预期的 [Lat, Lon]无法在关联数组的_geo_distance模式内搜索

    {
        "lat" : Lat,
        "lon" : Long
    }
    

    来自 elasticsearch.co 文档:

    请注意,字符串地理点按纬度、经度排序,而数组 地理点的顺序是相反的:lon,lat。

    所以以这种方式正确的排序符号是

    "_geo_distance": {
        "gps": [51.358599,0.531964],                      
    }
    

    "_geo_distance": {            
        "gps": {
            "lat": 0.531964,
            "lon": 51.358599  
         }  
    }                    
    

    ...因为我将我的 geo_point 数据存储为 [LON, LAT] 而不是 [LAT, LON],正如我所想的那样。

    现在它按预期工作。我现在的问题是,我应该在 geo_point 数组中以纬度/经度的相反顺序重新索引数据。

    我希望这句话可以帮助别人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      相关资源
      最近更新 更多