使用Elasticsearch函数得分查询并针对某个地理点进行衰减,是否可以设置目标距离?

使用Elasticsearch函数得分查询并针对某个地理点进行衰减,是否可以设置目标距离?,第1张

使用Elasticsearch函数得分查询并针对某个地理点进行衰减,是否可以设置目标距离

我看到几种方法可以做到这一点:

答:一种方法是简单地按距离原点的相反顺序按距离排序。您将使用

geo_distance
查询,然后按距离排序。在下面的查询中,最远的文档将首先出现,即排序值是距原点的距离,并且我们以降序排序。

{  "query": {    "filtered": {      "filter": {        "geo_distance": {          "from" : "100km",          "to" : "200km",          "location": { "lat": 10, "lon": 20          }        }      }    }  },  "sort": [    {      "_geo_distance": {        "location": {          "lat": 10,          "lon": 20        },        "order": "desc",        "unit": "km",        "distance_type": "plane"      }    }  ]}

B.第二种方法涉及使用

geo_distance_range
查询以便在原点周围定义一个“环”。圆环的宽度可以某种方式象征您要在高斯函数中使用的偏移+比例(尽管不会衰减)。在这里,我们定义了一个距原点500公里的10公里宽的环,并按该环中的距离对文档进行排序。

{  "query": {    "filtered": {      "filter": {        "geo_distance_range": {          "from": "495km",          "to": "505km",          "location": { "lat": 10, "lon": 20          }        }      }    }  },  "sort": [    {      "_geo_distance": {        "location": {          "lat": 10,          "lon": 20        },        "order": "desc",        "unit": "km",        "distance_type": "plane"      }    }  ]}

C.最后一种方法涉及更多。我们基本上是一个“逆高斯”形后,基本上都是这个数字(33)

,但颠倒,或者这一次它更好地代表甜甜圈形状后,我们是。我们可以将上面的解决方案B与

gauss
仅在该环内得分的函数结合在一起。在下面的查询中,我们基本上是说,我们只对距原点约500
km的位置感兴趣,而让高斯函数仅对那些文档起作用。虽然它并不完美,但是可能足够接近您的需求。

{  "query": {    "filtered": {      "filter": {        "geo_distance_range": {          "from": "495km",          "to": "505km",          "location": { "lat": 10, "lon": 20          }        }      },      "query": {        "function_score": {          "functions": [ {   "gauss": {     "location": {       "origin": {         "lat": 10,         "lon": 20       },       "offset": "500km",       "scale": "5km"     }   } }          ]        }      }    }  },  "sort": {    "_score": "desc"  }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5028251.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存