AWS CloudSearch中的lat,lon基于半径的搜索

时间:2015-06-15 06:14:51

标签: javascript node.js amazon-web-services geospatial amazon-cloudsearch

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

3 个答案:

答案 0 :(得分:3)

在cloudsearch中,无法在半径范围内搜索Latlons。您可以按距离订购,但可以在半径内搜索。

因为您希望半径范围内的所有结果。而是创建一个矩形,使其四边接触您想要搜索的圆。现在,您可以在边界框矩形内搜索并返回按距离排序的结果。

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

以下示例查询执行相同的操作: Q =用户*安培; FQ =位置%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安培;排序=地理%20asc

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

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

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

答案 1 :(得分:0)

You want to be ranking results based on the haversin function. That is equivalent to "searching within a radius" except it accounts for the fact that you're actually interested in the distance on the surface of a sphere.

Here is an example of such a query with CloudSearch (from 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

Your choice of server-side language is irrelevant, as CloudSearch provides only a REST interface. Have a look at the Getting Started guide if you haven't yet. http://docs.aws.amazon.com/cloudsearch/latest/developerguide/getting-started.html

答案 2 :(得分:-1)

您可以使用以下查询:

q=nikhil&expr.distance=haversin(35.621966,-120.686706,latlong.latitude,latlong.longitude)&sort=distance%20asc&return=distance

然后循环每个结果并具有if条件

它非常慢并且需要时间,因为节点将更多地取决于数据,但这是您的问题的一个答案。