我看到几种方法可以做到这一点:
答:一种方法是简单地按距离原点的相反顺序按距离排序。您将使用
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" }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)