AWS CloudSearch 中纬度、经度的基于半径的搜索

Radius Based Search on lat,lon in AWS CloudSearch

我们公司正在使用 AWS CloudSearch 搜索和检索用户 data.User 数据,该数据包含类型为 lat,lon 的字段 position。所以对于给定的半径和位置,我们应该找到半径范围内的所有用户。如何编写搜索查询来检索所需数据?
我们使用 node.js 作为服务器端语言。
请帮忙.

您想根据 haversin 函数对结果进行排名。这相当于 "searching within a radius" 除了它说明了您实际上对球体表面的距离感兴趣这一事实。

以下是使用 CloudSearch 进行此类查询的示例(来自 http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-locations.html):

q=restaurant&expr.distance=haversin(35.621966,-120.686706,location.latitude,location.longitude)&sort=distance asc

您选择的服务器端语言无关紧要,因为 CloudSearch 仅提供 REST 接口。如果您还没有,请查看入门指南。 http://docs.aws.amazon.com/cloudsearch/latest/developerguide/getting-started.html

在 cloudsearch 中,无法在半径范围内搜索 Latlons。可以按距离排序,也可以按半径搜索。

因为你想要一个半径内的所有结果。相反,创建一个矩形,使其四个边接触您要在其中搜索的圆。现在,您可以在边界框矩形内搜索,return 结果按距离排序。

缺点是会有一些结果在bounding box的角上,所以它们不在圆圈内,但会出现在cloudsearch结果中。您可以使用这些以及近似值或根据距离进一步过滤。

这是一个执行相同操作的示例查询: q=user*&fq=location%3A%5B%2740.628611,-100.694152%27,%2725.621966,-66.686706%27%5D&expr.geo=haversin%2838.958687,-77.343149,location.latitude,location.longitude%29&sort=geo%20asc

这里: fq=location%3A%5B%2740.628611,-100.694152%27,%2725.621966,-66.686706%27%5D ---> 在边界框 Latlons 内搜索,即左上角和右下角。

expr.geo=haversin%2838.958687,-77.343149,location.latitude,location.longitude%29&sort=geo%20asc ---> 创建一个表达式来计算搜索文档中 LatLon 之间的距离到一个固定点(将其作为圆心)。 returns 结果按距离排序。

请注意,"haversin" 距离函数将 LatLons 之间的距离计算为完美球体上两点之间的距离。