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

4

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


你们的后端是用PostgreSQL还是Elasticsearch? - Subburaj
请查看此链接:http://docs.mongodb.org/manual/reference/command/geoNear/#dbcmd.geoNear - Subburaj
2个回答

3
在云搜索中,不可能在半径内搜索Latlons。您可以按距离排序,但无法在半径内搜索。
由于您希望在半径内获取所有结果,因此请创建一个矩形,使其四个边界接触到您想要搜索的圆。现在,您可以在包围框矩形内进行搜索并返回按距离排序的结果。
缺点是将有一些结果位于包围框的角落,因此它们不在圆圈内,但它们将出现在云搜索结果中。您可以将它们作为近似值使用,或根据距离进一步筛选。
以下是执行相同操作的示例查询: 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与固定点(将其作为圆的中心)之间的距离,并按距离返回结果排序。
请注意,“haversin”距离函数将LatLons之间的距离计算为完美球体上两个点之间的距离。

1
你希望根据 haversin 函数来排名结果。这相当于“在半径内搜索”,但它考虑了你实际上对球面距离感兴趣的事实。
以下是 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接